GroupStyleSelector для ListView

Я пытаюсь создать собственный сектор группового стиля для моего 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.GroupStyleSelector"

Ошибка 2 Объект типа "TestGroupStyleSelector" не может быть применен к свойству, которое ожидает тип "System.Windows.Controls.GroupStyleSelector".

Я объявил класс, как показали другие вопросы здесь, в данный момент я довольно растерян относительно того, как создать селектор группового стиля для моего списка, есть идеи?

2 ответа

В WPF, используя

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

и наследование вашего селектора от GroupStyleSelector приведет к исключению "не может быть получено из закрытого типа" System.Windows.Controls.GroupStyleSelector.

Вместо этого используйте

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

и наследовать ваш селектор от StyleSelector

GroupStyleSelector - это делегат, предоставляемый ItemsControl:

Использование:

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

Замедление:

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

Он имеет делегат типа, который не может быть унаследован от do к спецификациям языка.

что вам нужно сделать, это создать класс, производный от StyleSelector:

public class GroupStyleSelector : StyleSelector
{
    public override Style SelectStyle(object item, DependencyObject container)
    {   
        return base.SelectStyle(item, container);
    }
}      
Другие вопросы по тегам