windows-phone-8 – LongListSelector第一个和最后一个项目的不同项目模板

前端之家收集整理的这篇文章主要介绍了windows-phone-8 – LongListSelector第一个和最后一个项目的不同项目模板前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写我的Windows Phone 8应用程序,它使用LongListSelector来显示一些数据.

如何为LongListSelector中的第一个和最后一个项设置不同的项模板?

基本上我只想在每个项目中显示相同的信息,但在最后和第一项中使用很少的不同项目“布局”.

您可以实现某种数据模板选择器,以帮助确定基于索引选择哪个模板.您可以从创建可重用的抽象TemplateSelector类开始.我使用了 Implementing Windows Phone 7 DataTemplateSelector and CustomDataTemplateSelector中解释的许多想法,但修改了实现以允许选择基于索引的模板.
  1. public abstract class TemplateSelector : ContentControl {
  2. public abstract DataTemplate SelectTemplate(object item,int index,int totalCount,DependencyObject container);
  3.  
  4. protected override void OnContentChanged(object oldContent,object newContent) {
  5. base.OnContentChanged(oldContent,newContent);
  6.  
  7. var parent = GetParentByType<LongListSelector>(this);
  8. var index = parent.ItemsSource.IndexOf(newContent);
  9. var totalCount = parent.ItemsSource.Count;
  10.  
  11. ContentTemplate = SelectTemplate(newContent,index,totalCount,this);
  12. }
  13.  
  14. private static T GetParentByType<T>(DependencyObject element) where T : FrameworkElement {
  15. T result = null;
  16. DependencyObject parent = VisualTreeHelper.GetParent(element);
  17.  
  18. while (parent != null) {
  19. result = parent as T;
  20.  
  21. if (result != null) {
  22. return result;
  23. }
  24.  
  25. parent = VisualTreeHelper.GetParent(parent);
  26. }
  27.  
  28. return null;
  29. }
  30. }

拥有该类后,您可以添加自己的数据模板选择器逻辑.在你的情况下,可能是这样的

  1. public class MyTemplateSelector : TemplateSelector {
  2. public DataTemplate First { get; set; }
  3. public DataTemplate Default { get; set; }
  4. public DataTemplate Last { get; set; }
  5.  
  6. public override DataTemplate SelectTemplate(object item,DependencyObject container) {
  7. if (index == 0)
  8. return First;
  9. else if (index == totalCount-1)
  10. return Last;
  11. else
  12. return Default;
  13. }
  14. }

最后是Xaml

  1. <phone:PhoneApplicationPage.Resources>
  2. <DataTemplate x:Key="first">
  3. <TextBlock Text="{Binding Name}" Foreground="Yellow" />
  4. </DataTemplate>
  5. <DataTemplate x:Key="default">
  6. <TextBlock Text="{Binding Name}" />
  7. </DataTemplate>
  8. <DataTemplate x:Key="last">
  9. <TextBlock Text="{Binding Name}" Foreground="Red" />
  10. </DataTemplate>
  11.  
  12. <DataTemplate x:Key="SelectingTemplate">
  13. <local:MyTemplateSelector Content="{Binding}"
  14. First="{StaticResource first}"
  15. Default="{StaticResource default}"
  16. Last="{StaticResource last}"
  17. HorizontalContentAlignment="Stretch" />
  18. </DataTemplate>
  19. </phone:PhoneApplicationPage.Resources>
  20.  
  21. <phone:LongListSelector
  22. ItemTemplate="{StaticResource SelectingTemplate}"
  23. ItemsSource="{Binding Data}" />

猜你在找的Windows相关文章