2017-07-16 4 views
0

ich die Entwicklung App mit Visual Studio zu Android, und ich habe Datei ItemsPage.xaml mit diesem Code:Wie ändere ich die Farbe in StackLayout?

<ContentPage.Content> 
    <StackLayout> 
     <ListView x:Name="ItemsListView" ItemsSource="{Binding Items}" VerticalOptions="FillAndExpand" HasUnevenRows="true" RefreshCommand="{Binding LoadItemsCommand}" IsPullToRefreshEnabled="true" IsRefreshing="{Binding IsBusy, Mode=OneWay}" CachingStrategy="RecycleElement" ItemSelected="OnItemSelected"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <ViewCell> 
         <StackLayout x:Name="General" Orientation="Horizontal" HorizontalOptions="Fill" Padding="5"> 
          <Image Source="{Binding FileName, Converter={StaticResource ImageConverter}}" HeightRequest="150" WidthRequest="150" AbsoluteLayout.LayoutBounds="250.25, 0.25, 50, 50 "/> 
         <StackLayout Orientation="Vertical"> 
          <Label Text="ST:" /><Label Text = "{Binding ST_string}" FontSize="24" AbsoluteLayout.LayoutBounds="0.25, 0.25, 400, 40"/> 
          <Label Text="Folio:" /><Label Text = "{Binding Folio_string}" FontSize="24" AbsoluteLayout.LayoutBounds="0.25, 0.25, 400, 40"/> 
           <Label Text="txt" /><Label Text = "{Binding Sent} " FontSize="24" AbsoluteLayout.LayoutBounds="0.25, 0.25, 400, 40"/> 
         </StackLayout> 

        </StackLayout> 
        </ViewCell> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 
    </StackLayout> 
</ContentPage.Content> 

Und in meinem ItemsPage.xaml.cs ich nicht auf meine StackLayout mit Name="General" zugreifen können, ich diese benötigen malen mit Farbe, aber Ich kann nicht, bitte hilf mir.

Im Allgemeinen kann ich General.Background nicht tun, ich weiß nicht, darauf zugreifen.

Danke!

Antwort

1

Elemente innerhalb einer DataTemplate sind von außerhalb der DataTemplate nicht zugänglich; Dazu gehört der Code-Behind (die xaml.cs Datei).

DataTemplates werden in einer besonderen Weise behandelt. Sie werden als Vorlage (daher der Name) für jedes Element innerhalb der ListView verwendet. Dies bedeutet, dass zur Laufzeit eine Instanz des Inhalts innerhalb der DataTemplate für jedes Element wird. Wenn Sie 20 Elemente in dieser Liste haben, wird es 20 StackLayout s mit dem Namen General geben. Sie können über DataTemplates in der docs lesen.

Wenn Sie die Hintergrundfarbe des StackLayout, der einfachste Weg, setzen wollen, ist, dass auf dem StackLayout Element direkt zu tun:

<StackLayout x:Name="General" BackgroundColor="Blue" Orientation="Horizontal"... 

Alternativ können Sie ContentView anlegen und dass innerhalb des ViewCell. Die BindingContext der ContentView wird automatisch auf den aktuellen Artikel eingestellt. ContentView s sind ein bisschen wie ContentPage s, aber man kann sie innerhalb einer Seite wie jeder anderen View (wie ein Button oder BoxView verwenden.

bearbeiten

a a ContentView die rechte Maustaste und fügen Sie hinzufügen neue Datei, wählen InhaltAlle Setzen Sie die XAML innerhalb ViewCell innerhalb der ContentView.

<?xml version="1.0" encoding="UTF-8"?> 
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Testing.MyView"> 
    <ContentView.Content> 
     <StackLayout x:Name="General" Orientation="Horizontal" HorizontalOptions="Fill" Padding="5"> 
      <Image Source="{Binding FileName, Converter={StaticResource ImageConverter}}" HeightRequest="150" WidthRequest="150" AbsoluteLayout.LayoutBounds="250.25, 0.25, 50, 50 " /> 
      <StackLayout Orientation="Vertical"> 
       <Label Text="ST:" /> 
       <Label Text="{Binding ST_string}" FontSize="24" AbsoluteLayout.LayoutBounds="0.25, 0.25, 400, 40" /> 
       <Label Text="Folio:" /> 
       <Label Text="{Binding Folio_string}" FontSize="24" AbsoluteLayout.LayoutBounds="0.25, 0.25, 400, 40" /> 
       <Label Text="txt" /> 
       <Label Text="{Binding Sent} " FontSize="24" AbsoluteLayout.LayoutBounds="0.25, 0.25, 400, 40" /> 
      </StackLayout> 
     </StackLayout> 
    </ContentView.Content> 
</ContentView> 

In dem Code-behind, können Sie alle Steuerelemente zugreifen:

public partial class MyView : ContentView 
{ 
    public MyView() 
    { 
     InitializeComponent(); 

     General.BackgroundColor = true ? Color.Blue : Color.Brown; 
    } 
} 

Dann fügen Sie die ContentView zum ViewCell:

<ListView x:Name="ItemsListView" ItemsSource="{Binding Items}" VerticalOptions="FillAndExpand" HasUnevenRows="true" RefreshCommand="{Binding LoadItemsCommand}" IsPullToRefreshEnabled="true" IsRefreshing="{Binding IsBusy, Mode=OneWay}" CachingStrategy="RecycleElement" ItemSelected="OnItemSelected"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <ViewCell> 
       <local:MyView/> 
      </ViewCell> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 
+0

Aber ich brauche Background in einigen Fällen ändern, sollten Sie mir Lösung erklären alternativ als es scheint zu sein, was ich brauche. – fabulias

+0

Sie können beginnen, indem Sie sich dieses kurze Tutorial anschauen: https://xamarinhelp.com/xamarin-forms-user-control/ Im Wesentlichen ist eine 'ContentView' genau wie eine' ContentPage', aber Sie können die 'ContentView setzen 'innerhalb einer Seite –

+0

Ich verstehe nicht, Bruder, können Sie mir helfen? Bitte – fabulias

Verwandte Themen