GroupStyleSelector for a ListView

本文关键字:ListView for GroupStyleSelector | 更新日期: 2023-09-27 18:26:00

根据我在这里看到的关于堆栈溢出的其他问题,我正在尝试为我的ListView创建一个自定义的组样式扇区。

public class TestGroupStyleSelector : GroupStyleSelector
{
    protected override GroupStyle SelectGroupStyleCore(object item, uint level)
    {
            return (GroupStyle)App.Current.Resources["grpStyle"];
    }
}
<ListView GroupStyleSelector="{StaticResource grpStyleSelector}">

我有两个错误:

错误1"TestGroupStyleSelector":无法从密封类型"System.Windows.Controls.GroupStyleSelecter"派生

错误2"TestGroupStyleSelector"类型的对象无法应用于要求类型为"System.Windows.Controls.GroupStyleSelecter"的属性。

正如这里的其他问题所示,我已经声明了这个类,在这一点上,我非常不知道如何为我的listview创建一个groupstyleselect,有什么想法吗?

GroupStyleSelector for a ListView

在WPF中,使用

<ListView GroupStyleSelector="{StaticResource grpStyleSelector}" />

并且从GroupStyleSelector继承选择器将导致"无法从密封类型派生"System.Windows.Controls.GroupStyleSelector"异常。

相反,使用

<ListView>
   <ListView.GroupStyle>
     <GroupStyle ContainerStyleSelector="{StaticResource grpStyleSelector}"  />
   </ListView.GroupStyle>
</ListView>

并从StyleSelector

继承选择器

GroupStyleSelector是由ItemsControl:暴露的Delegate

用法:

public GroupStyleSelector GroupStyleSelector
{
    get => (GroupStyleSelector)GetValue(GroupStyleSelectorProperty);
    set => SetValue(GroupStyleSelectorProperty, value);
}

声明:

public delegate GroupStyle GroupStyleSelector(CollectionViewGroup group, int level);

它的类型是delegate,根据语言规范,它不能从继承。

您需要做的是创建一个从StyleSelector:派生的类

public class GroupStyleSelector : StyleSelector
{
    public override Style SelectStyle(object item, DependencyObject container)
    {   
        return base.SelectStyle(item, container);
    }
}