Переопределить шаблон стиля элемента с помощью 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.