加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-13 20:27:54 所属栏目:Windows 来源:网络整理
导读:我正在编写我的Windows Phone 8应用程序,它使用LongListSelector来显示一些数据. 如何为LongListSelector中的第一个和最后一个项设置不同的项模板? 基本上我只想在每个项目中显示相同的信息,但在最后和第一项中使用很少的不同项目“布局”. 您可以实现某种
我正在编写我的Windows Phone 8应用程序,它使用LongListSelector来显示一些数据.

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

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

您可以实现某种数据模板选择器,以帮助确定基于索引选择哪个模板.您可以从创建可重用的抽象TemplateSelector类开始.我使用了 Implementing Windows Phone 7 DataTemplateSelector and CustomDataTemplateSelector中解释的许多想法,但修改了实现以允许选择基于索引的模板.
public abstract class TemplateSelector : ContentControl {
  public abstract DataTemplate SelectTemplate(object item,int index,int totalCount,DependencyObject container);

  protected override void OnContentChanged(object oldContent,object newContent) {
    base.OnContentChanged(oldContent,newContent);

    var parent = GetParentByType<LongListSelector>(this);
    var index = parent.ItemsSource.IndexOf(newContent);
    var totalCount = parent.ItemsSource.Count;

    ContentTemplate = SelectTemplate(newContent,index,totalCount,this);
  }

  private static T GetParentByType<T>(DependencyObject element) where T : FrameworkElement {
    T result = null;
    DependencyObject parent = VisualTreeHelper.GetParent(element);

    while (parent != null) {
      result = parent as T;

      if (result != null) {
        return result;
      }

      parent = VisualTreeHelper.GetParent(parent);
    }

    return null;
  }
}

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

public class MyTemplateSelector : TemplateSelector {
  public DataTemplate First { get; set; }
  public DataTemplate Default { get; set; }
  public DataTemplate Last { get; set; }

  public override DataTemplate SelectTemplate(object item,DependencyObject container) {
    if (index == 0)
      return First;
    else if (index == totalCount-1)
      return Last;
    else
      return Default;
  }
}

最后是Xaml

<phone:PhoneApplicationPage.Resources>
    <DataTemplate x:Key="first">
        <TextBlock Text="{Binding Name}" Foreground="Yellow" />
    </DataTemplate>
    <DataTemplate x:Key="default">
        <TextBlock Text="{Binding Name}" />
    </DataTemplate>
    <DataTemplate x:Key="last">
        <TextBlock Text="{Binding Name}" Foreground="Red" />
    </DataTemplate>

    <DataTemplate x:Key="SelectingTemplate">
        <local:MyTemplateSelector Content="{Binding}"
                                First="{StaticResource first}"
                                Default="{StaticResource default}"
                                Last="{StaticResource last}"
                                HorizontalContentAlignment="Stretch" />
    </DataTemplate>
</phone:PhoneApplicationPage.Resources>

<phone:LongListSelector
            ItemTemplate="{StaticResource SelectingTemplate}"
            ItemsSource="{Binding Data}" />

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读