Переопределить шаблон стиля элемента с помощью DataTemplateSelector

У меня есть стиль на ListViewItem, который устанавливает свойство Theme

<Style x:Key="{x:Type ListViewItem}" TargetType="{x:Type ListViewItem}">
    <Setter Property="Template" Value="{StaticResource ListViewItemTemplate}"/>
</Style>

Тем не менее, в одном из случаев, когда я использую ListView, я хочу использовать DataTemplateSelector, чтобы определить, какой шаблон использовать

<Style x:Key="MyListStyle" TargetType="{x:Type ListView}" BasedOn="{StaticResource {x:Type ListView}}">
    <Setter Property="ItemTemplateSelector" Value="{StaticResource MyItemTemplateSelector}"/>
</Style>

Это применяется так

<ListView Style="{StaticResource MyListStyle}/>

Однако может показаться, что стиль элемента переходит во владение, и этот стиль применяется ко всем элементам в ListView. Я нашел этот вопрос, у которого была похожая проблема, однако, решение просто не использует шаблон "Стиль элемента" вообще. Мне нужно сохранить это.

Я поиграл с ContentTemplateSelector путем рестайлинга ListViewItems в этом ListView

<Style x:Key="MyItemStyle" BasedOn="{StaticResource {x:Type ListViewItem}}" TargetType="{x:Type ListViewItem}">
    <Setter Property="ContentTemplateSelector" Value="{StaticResource MyItemTemplateSelector}"/>
</Style>

Однако вместо этого используется шаблон в другом стиле. Если я попытаюсь обнулить шаблон, то ничего не появится вообще!

<Setter Property="Template" Value="{x:Null}"/

Есть ли способ, которым я могу заменить шаблон в ListViewItems для данного ListView, сохраняя при этом остальную часть моего стиля?

1 ответ

Решение

Мне не удалось переопределить шаблон, установленный в ListViewItem в стиле ListView.

Чтобы обойти это, я заменил шаблон в ListViewItem другим ItemTemplateSelector в моем базовом стиле ListView. Этот селектор всегда возвращает мой оригинальный шаблон. В моем дочернем стиле ListView используется новый ItemTemplateSelector.

Другие вопросы по тегам