使用 DataTemplateSelector 覆盖项目样式模板

Override item Style Template with a DataTemplateSelector

我在 ListViewItem 上有一个设置主题的样式 属性

<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 中的所有项目。我发现 this question 有类似的问题,但是,解决方案根本不使用项目样式上的模板。我需要保留它。

我通过重新设计 ListView 中的 ListViewItems 来尝试使用 ContentTemplateSelector

<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}"/

有没有一种方法可以替换给定 ListView 的 ListViewItems 上的模板,同时保留其余样式?

我无法覆盖在 ListView 样式中的 ListViewItem 上设置的模板。

为了解决这个问题,我用基本 ListView 样式中的另一个 ItemTemplateSelector 替换了 ListViewItem 上的模板。这个选择器总是 returns 我的原始模板。在我的 ListView 子样式中,使用了新的 ItemTemplateSelector。