3

根据我在这里看到的堆栈溢出的其他问题,我正在尝试为我的 ListView 制作一个自定义 groupstyle 扇区。

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.GroupStyleSelector”派生

错误 2 “TestGroupStyleSelector”类型的对象不能应用于需要“System.Windows.Controls.GroupStyleSelector”类型的属性。

我已经声明了这个类,因为这里的其他问题已经显示出来了,在这一点上,我对如何为我的列表视图创建一个 groupstyleselector 非常迷茫,有什么想法吗?

4

2 回答 2

3

在 WPF 中,使用

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

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

相反,使用

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

并从StyleSelector继承您的选择器

于 2015-09-29T08:53:41.917 回答
1

GroupStyleSelector是一个Delegate暴露的ItemsControl

用法:

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);
    }
}
于 2015-04-08T07:36:27.607 回答