2017-05-18 8 views
1

Ich habe ein seltsames Problem. Dies geschieht nur in Xamarin-Formen - UWP. Ich benutze Listview in Listview. Wenn ich auf jede Liste klicke, wird die untergeordnete Liste angezeigt. Außerdem habe ich eine feste Höhe für die untergeordnete Liste festgelegt, so dass es gescrollt werden kann. Jetzt auf der Überprüfung, auch wenn es mehr Elemente hat, ist die schwarze Farbe unten ausgefüllt. Wie kann ich das beheben?Schwarze Farbe ausgefüllt Restplatz Listview Xamarin-UWP

Descr

XAML Listen:

<ListView x:Name="MyProducts" 
      IsRefreshing="{Binding IsBusy, Mode=TwoWay}" 
      RefreshCommand="{Binding GetAllProducts,Mode=TwoWay}" 
      IsPullToRefreshEnabled="true" 
      HasUnevenRows="True" 
      BackgroundColor="White" 
      ItemSelected="CategorySelected" 
      SeparatorVisibility="None" 
      ItemsSource="{Binding MyProductsList}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <ViewCell> 
       <StackLayout BackgroundColor="#e6e6e6" Margin="0,2,0,2"> 
        <StackLayout Margin="1" BackgroundColor="White"> 
         <Grid Padding="0,10,0,0"> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="Auto"/> 
           <RowDefinition Height="Auto"/> 
           <RowDefinition Height="Auto"/> 
          </Grid.RowDefinitions> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="9*"/> 
           <ColumnDefinition Width="1*"/> 
          </Grid.ColumnDefinitions> 
          <Label Grid.Row="0" Grid.Column="0" Text="Product Category" YAlign="Center" Margin="10,0,0,0" Style="{DynamicResource LabelLightStyle}"/> 
          <Label Grid.Row="1" Grid.Column="0" Text="{Binding Model.ProductCategoryName}" Style="{DynamicResource LabelRedStyle}" YAlign="Center" Margin="10,0,0,0"/> 
          <Image Grid.Row="0" Grid.Column="1" IsVisible="{Binding IconDown}" Source="ArrowDown.png" HeightRequest="15" Grid.RowSpan="2" Margin="0,0,5,0" HorizontalOptions="End" VerticalOptions="Center"/> 
          <Image Grid.Row="0" Grid.Column="1" IsVisible="{Binding IconUp}" Source="ArrowUp.png" HeightRequest="15" Grid.RowSpan="2" Margin="0,0,5,0" HorizontalOptions="End" VerticalOptions="Center"/> 
          <ListView Grid.Row="2" Grid.ColumnSpan="2" 
             IsVisible="{Binding ListVisibility}" 
             SeparatorVisibility="Default" 
             SeparatorColor="#e6e6e6" 
             ItemSelected="ProductSelected" 
             HeightRequest="220" 
             BackgroundColor="#f2f2f2" 
             HorizontalOptions="FillAndExpand" 
             ItemsSource="{Binding Model.Products}"> 
           <ListView.ItemTemplate> 
            <DataTemplate> 
             <ViewCell> 
              <StackLayout BackgroundColor="#e6e6e6"> 
               <StackLayout Margin="0,0,0,1" BackgroundColor="#f2f2f2"> 
                <Grid Padding="0,10,0,10"> 
                 <Grid.RowDefinitions> 
                  <RowDefinition Height="Auto"/> 
                  <RowDefinition Height="Auto"/> 
                 </Grid.RowDefinitions> 
                 <Grid.ColumnDefinitions> 
                  <ColumnDefinition Width="9*"/> 
                  <ColumnDefinition Width="1*"/> 
                 </Grid.ColumnDefinitions> 
                 <Label Grid.Row="0" Grid.Column="0" Text="{Binding MachineModel, StringFormat='Machine Model Number : {0}'}" YAlign="Center" Margin="10,0,0,0" Style="{DynamicResource LabelStyle}"/> 
                 <Label Grid.Row="1" Grid.Column="0" Text="{Binding CreatedDate, StringFormat='Date {0}'}" Style="{DynamicResource LabelTinyStyle}" YAlign="Center" Margin="10,0,0,0"/> 
                 <Image Grid.Row="0" Grid.Column="1" Source="ArrowRight.png" HeightRequest="15" Grid.RowSpan="2" Margin="0,0,10,0" HorizontalOptions="End" VerticalOptions="Center"/> 
                </Grid> 
               </StackLayout> 
              </StackLayout> 
             </ViewCell> 
            </DataTemplate> 
           </ListView.ItemTemplate> 
          </ListView> 
         </Grid> 
        </StackLayout> 
       </StackLayout> 
      </ViewCell> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 
+0

Wo ist Ihr XAML? Kannst du es posten? – AVK

+0

Das funktioniert gut in IOS und Android. Dieses seltsame Problem passiert nur in UWP. Finden Sie die XAML verwendet https://docs.google.com/document/d/1MpbGpZxfu6dsynLGGwJeYAHW1pnt37hHFVs1P6MrDM/edit?usp=sharing – Renjith

+0

Warum haben Sie 2 'StackLayout' in' DataTemplate' eins mit 'BackgroundColor =" # e6e6e6 "', und ein anderes mit 'BackgroundColor =" White "'? – AVK

Antwort

0

das Problem wurde behoben, durch individuelle ViewCell Schreiben und durch Verwendung von nativen Datatemplate zu machen. Jetzt gibt es keine schwarzen Zellen beim schnellen Scrollen. Ich poste meine Antwort, damit jemand sie nützlich finden kann.

Für zB: Wenn Sie eine Liste von Namen haben angezeigt folgen werden:

Fügen Sie zunächst benutzerdefinierte viewcell als

public class CustomViewCell : ViewCell 
    { 
    public static readonly BindableProperty NameProperty = 
     BindableProperty.Create("Name", typeof(string), typeof(CustomViewCell), ""); 

    public string Name 
    { 
     get { return (string)GetValue(NameProperty); } 
     set { SetValue(NameProperty, value); } 
    } 

    } 

nun das Listview in XAML wie folgt hinzufügen folgt:

 <ListView 
     ItemsSource="{Binding Products}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <custom:CustomViewCell Name="{Binding Name}"/> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
     </ListView> 

Dann müssen Sie den DateTemplate-Stil in App.xaml des UWP-Projekts wie folgt schreiben:

<ResourceDictionary> 
    <DataTemplate x:Key="CustomTemplate"> 
     <Grid Padding="10"> 
      <TextBlock Foreground="#333333" FontSize="14" VerticalAlignment="Center" Text="{Binding Name"/> 
     </Grid> 
    </DataTemplate> 
    </ResourceDictionary> 

Schließlich schreiben Sie einen CustomRenderer, um die native Viewzelle zu unserem ListView zu ersetzen.

public class CustomViewCellRenderer : ViewCellRenderer 
{ 
public override Windows.UI.Xaml.DataTemplate GetTemplate(Cell cell) 
{ 
    return App.Current.Resources["CustomTemplate"] as Windows.UI.Xaml.DataTemplate; 
} 
} 

Jetzt funktioniert die Liste einwandfrei, ohne dass ein Black Cell Rendering auftritt.

Verwandte Themen