2014-08-31 2 views
0

У меня проблемы с моим ListView. Мой файл данных состоит из изображения и 2 текстовых блоков. Но некоторые изображения не имеют источника и поэтому не отображаются. Я думаю, что причина мерцания в том, что у некоторых предметов нет изображений (только текстовые блоки), и поэтому они имеют разный размер. Так как я могу это решить?Заголовки ListView мерцают при прокрутке

Это мой XAML код:

<Page.Resources> 
    <CollectionViewSource x:Name="phts" IsSourceGrouped="True"/> 

    <DataTemplate x:Key="AddrBookItemTemplate"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <Image Grid.Column="0" Source="{Binding Image}" Name="image" MaxHeight="90" MaxWidth="90" Stretch="Fill" Tag="{Binding Url}"/> 
      <Grid Grid.Column="1"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="*"/> 
        <RowDefinition Height="*"/> 
       </Grid.RowDefinitions> 
       <TextBlock Grid.Row="0" Name="txt1" Text="{Binding Title}" Tag="{Binding Url}"/> 
       <TextBlock Grid.Row="1" Name="txt2" Text="{Binding Title2}" Tag="{Binding Url}"/> 
      </Grid> 
     </Grid> 
    </DataTemplate> 
    <DataTemplate x:Key="AddrBookGroupHeaderTemplate"> 
     <Border Background="Transparent" Margin="0,5,0,5" Tag="{Binding Key}"> 
      <Border Background="#E0E0E0" 
        Width="400" Height="30" Margin="0,0,0,0" HorizontalAlignment="Left" Tag="{Binding Group_ID}"> 
       <TextBlock Text="{Binding Key}" Foreground="Black" FontSize="18" Padding="6" 
          FontFamily="{StaticResource PhoneFontFamilySemiLight}" HorizontalAlignment="Left" VerticalAlignment="Center"/> 
      </Border> 
     </Border> 
    </DataTemplate> 
</Page.Resources> 

<Grid x:Name="grid"> 
    <ListView Background="White" 
       Foreground="Black" 
       ItemsSource="{Binding Source={StaticResource phts}}" 
       ItemTemplate="{StaticResource AddrBookItemTemplate}"> 
     <ListView.GroupStyle> 
      <GroupStyle HidesIfEmpty="True" HeaderTemplate="{StaticResource AddrBookGroupHeaderTemplate}"/> 
     </ListView.GroupStyle> 
    </ListView> 
</Grid> 

Вот мой код:

public sealed partial class TestPage : Page 
{ 

    public TestPage() 
    { 
     this.ManipulationMode = ManipulationModes.All; 
     this.InitializeComponent(); 

     loadContent(); 
    } 

    /// <summary> 
    /// Invoked when this page is about to be displayed in a Frame. 
    /// </summary> 
    /// <param name="e">Event data that describes how this page was reached. 
    /// This parameter is typically used to configure the page.</param> 
    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
    } 

    private void loadContent() 
    { 
     NewsGroup group1 = new NewsGroup("Test 1"); 
     NewsGroup group2 = new NewsGroup("Test 2"); 
     NewsGroup group3 = new NewsGroup("Test 3"); 
     NewsGroup group4 = new NewsGroup("Test 4"); 
     NewsGroup group5 = new NewsGroup("Test 5"); 
     NewsGroup group6 = new NewsGroup("Test 6"); 

     List<NewsGroup> groups = new List<NewsGroup>(new NewsGroup[] {group1, group2, group3, group4, group5, group6}); 

     Random rand = new Random(); 
     foreach(NewsGroup group in groups) 
     { 
      for (int i = 0; i < 10; i++) 
      { 
       ArticleHeader hdr = new ArticleHeader(); 

       if (rand.Next() % 5 == 2) 
       { 
        hdr.Image = "https://pbs.twimg.com/profile_images/1885929594/Nomad_watermark_white.jpg"; 
       } 

       hdr.Title = "Short title"; 
       hdr.Title2 = "Very big title here should be. Bla bla bla bla bla! Bla bla bla? Blablabl blab bla bla lab bbalblablalb blablalbal"; 

       group.Add(hdr); 
      } 
     } 

     ((CollectionViewSource)Resources["phts"]).Source = groups; 
    } 
} 

public class ArticleHeader 
{ 
    public string Time { get; set; } 
    public string Title { get; set; } 
    public string Url { get; set; } 
    public string Image { get; set; } 
    public string Title2 { get; set; } 
} 

public class NewsGroup : List<ArticleHeader> 
{ 
    public NewsGroup(string name) 
    { 
     Key = name; 
    } 

    public string Key { get; set; } 
    public string GroupUrl { get; set; } 
    public string Group_ID { get; set; } 
} 
+0

Используйте * размер вместо Auto в ColumnDefinition. – Vishal

+0

@Vishal, это не решает проблему – FruitDealer

+0

Не могли бы вы разместить изображения? – Vishal

ответ

0

У меня был один и тот же тип проблемы. Моя шахта произошла, когда я перешел на новый экран, я просмотрел некоторые сообщения о документации и блоге и обнаружил, что если я установил свою непрозрачность на 99% (0,99) в теге xaml для списка или всей страницы xaml, он ушел , Я знаю, что это очень хакерское решение, но оригинальная проблема сама по себе не имеет смысла. Попробуйте это и сообщите мне, если это сработает. В приведенном выше коде не мерцает, когда я развертываю его на своем устройстве. Я использую Nokia Lumia 1520 для тестирования.

Также я бы предложил использовать шаблон MVVM, чтобы вы могли использовать логику вне вашего кода, связанного с пользовательским интерфейсом. Было бы легче управлять и находить проблемы. Просто предложение :)

+0

Я попытался скрыть непрозрачность, но это не помогло мне. Вот видео моего текущего приложения, где я столкнулся с этой проблемой. Вы можете видеть с самого начала, что верхний заголовок мерцает: https://onedrive.live.com/redir?resid=65A15980B252B4BA!19089&authkey=!AMVH0LPJeOfwcHs&ithint=video%2cmp4 – FruitDealer

0

У меня такое же поведение в нескольких списках ListView в моих приложениях. Единственное решение (насколько мне известно) - установить высоту содержимого элемента на фиксированное значение.

Также: Работа с минимальной высотой уменьшает мерцание, если только некоторые из ваших предметов имеют разную высоту.