UWP ListView,第一个项目和最后一个项目的不同项目模板

德芙

我试图建立DataTemplateSelector为我的ListView的第一个和最后一个项目选择不同的项目模板。

在我的DataTemplateSelector中,我尝试找到父ListView并基于该检查项目索引并选择正确的数据模板。

问题是我无法像在SelectTemplateCore()DependencyObject容器对象的父级中那样获得父级ListView。

如何根据商品位置选择其他模板?

我的DataTemplateSelector:

public class FirstLastDataTemplateSelector : DataTemplateSelector
{
    public DataTemplate DefaultTemplate { get; set; }
    public DataTemplate FirstItemTemplate { get; set; }
    public DataTemplate LastItemTemplate { get; set; }

    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
    {
        var lv = GetListView(container);
        if (lv != null)
        {
            var i = lv.Items.IndexOf(item);
            if (i == 0)
            {
                return FirstItemTemplate;
            }
            else if (i == lv.Items.Count - 1)
            {
                return LastItemTemplate;
            }
        }
        return DefaultTemplate;
    }

    public static ListView GetListView(DependencyObject element)
    {
        if (element is ListView)
        {
            return (ListView)element;
        }
        var r = VisualTreeHelper.GetChildrenCount(element);
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++)
        {
            var child = VisualTreeHelper.GetChild(element, i);

            var result = GetListView(child);
            if (result == null)
            {
                continue;
            }
            else
            {
                return result;
            }
        }
        return null;
    }
}

xaml中的ListView:

<ListView ItemsSource="{x:Bind ViewModel.Items, Mode=OneWay}" ItemTemplateSelector="{StaticResource FirstLastDataTemplateSelector}" SelectionMode="None" IsItemClickEnabled="False">
德芙

在我原来的DataTemplateSelector中发现了问题。尽管我实际上需要父ListView,但我仍在尝试查找子对象。

这是更新的,固定的DataTemplateSelector:

public class FirstLastDataTemplateSelector : DataTemplateSelector
{
    public DataTemplate DefaultTemplate { get; set; }
    public DataTemplate FirstItemTemplate { get; set; }
    public DataTemplate LastItemTemplate { get; set; }

    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
    {
        var lv = GetListView(container);
        if (lv != null)
        {
            var i = lv.Items.IndexOf(item);
            if (i == 0)
            {
                return FirstItemTemplate;
            }
            else if (i == lv.Items.Count - 1)
            {
                return LastItemTemplate;
            }
        }
        return DefaultTemplate;
    }


    public static ListView GetListView(DependencyObject element)
    {
        var parent = VisualTreeHelper.GetParent(element);
        if (parent == null)
        {
            return null;
        }
        var parentListView = parent as ListView;
        return parentListView ?? GetListView(parent);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

UWP:部署一个使用 SQLite 和 Dapper 的项目

来自分类Dev

检索ListView或GridView中第一个和最后一个可见项目的索引?

来自分类Dev

Yii2 ListView中的第一个和最后一个项目

来自分类Dev

NavigationView中的UWP ListView,仅呈现第一个子级

来自分类Dev

如何在水平RecyclerView中正确对齐第一个和最后一个项目的中心

来自分类Dev

禁用“猫头鹰轮播”中第一个和最后一个项目的弹跳

来自分类Dev

Stream 对第一个和最后一个项目做不同的事情,Java 8

来自分类Dev

为集合UWP中的每个项目生成一个组

来自分类Dev

ListView项目的“删除”选项始终删除第一个项目,无论单击哪个项目

来自分类Dev

Listview仅填充第一个项目

来自分类Dev

Edittext集中在第一个listview项目中

来自分类Dev

MySQL为每个项目的最后一个用户过滤第一个日期

来自分类Dev

如何传递最后一个项目时自动循环到第一个项目的数组中的最后N个值?

来自分类Dev

Android自定义listview在第一个位置显示最后一个项目

来自分类Dev

uwp 自适应 gridview 呈现第一个元素错误

来自分类Dev

最佳实践:处理foreach中的第一个/最后一个项目

来自分类Dev

如何在Owl Carousel 2的可见项目中为第一个项目和最后一个项目添加类?

来自分类Dev

如何使用linq从列表中找到最后一个具有相同项目的项目

来自分类Dev

ItemsControl中的项目采用第一个项目的宽度

来自分类Dev

Listview替换第一个项目,而不是创建新项目

来自分类Dev

Listview项目内的UWP按钮

来自分类Dev

UWP更改ListView项目高度

来自分类Dev

UWP ListView未加载项目

来自分类Dev

无法选择列表框中两个相同项目的最后一个

来自分类Dev

如何从2个嵌入式不同项目中运行一个项目

来自分类Dev

更改项目元素和离子清单中最后一个项目的颜色

来自分类Dev

组合框中的两个相同项目,但第一个总是被选择C#

来自分类Dev

根据第一个属性获取项目和后续项目

来自分类Dev

第二个 flex 项目的背景颜色也应用于第一个项目?

Related 相关文章

  1. 1

    UWP:部署一个使用 SQLite 和 Dapper 的项目

  2. 2

    检索ListView或GridView中第一个和最后一个可见项目的索引?

  3. 3

    Yii2 ListView中的第一个和最后一个项目

  4. 4

    NavigationView中的UWP ListView,仅呈现第一个子级

  5. 5

    如何在水平RecyclerView中正确对齐第一个和最后一个项目的中心

  6. 6

    禁用“猫头鹰轮播”中第一个和最后一个项目的弹跳

  7. 7

    Stream 对第一个和最后一个项目做不同的事情,Java 8

  8. 8

    为集合UWP中的每个项目生成一个组

  9. 9

    ListView项目的“删除”选项始终删除第一个项目,无论单击哪个项目

  10. 10

    Listview仅填充第一个项目

  11. 11

    Edittext集中在第一个listview项目中

  12. 12

    MySQL为每个项目的最后一个用户过滤第一个日期

  13. 13

    如何传递最后一个项目时自动循环到第一个项目的数组中的最后N个值?

  14. 14

    Android自定义listview在第一个位置显示最后一个项目

  15. 15

    uwp 自适应 gridview 呈现第一个元素错误

  16. 16

    最佳实践:处理foreach中的第一个/最后一个项目

  17. 17

    如何在Owl Carousel 2的可见项目中为第一个项目和最后一个项目添加类?

  18. 18

    如何使用linq从列表中找到最后一个具有相同项目的项目

  19. 19

    ItemsControl中的项目采用第一个项目的宽度

  20. 20

    Listview替换第一个项目,而不是创建新项目

  21. 21

    Listview项目内的UWP按钮

  22. 22

    UWP更改ListView项目高度

  23. 23

    UWP ListView未加载项目

  24. 24

    无法选择列表框中两个相同项目的最后一个

  25. 25

    如何从2个嵌入式不同项目中运行一个项目

  26. 26

    更改项目元素和离子清单中最后一个项目的颜色

  27. 27

    组合框中的两个相同项目,但第一个总是被选择C#

  28. 28

    根据第一个属性获取项目和后续项目

  29. 29

    第二个 flex 项目的背景颜色也应用于第一个项目?

热门标签

归档