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);
}
}