0

我在 ListViewItem 上有一个设置 Theme 属性的 Style

<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 中的所有项目。我发现这个问题有一个类似的问题,但是,该解决方案根本不使用 Item 样式上的模板。我需要保持这一点。

我通过在 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 上的模板,同时保留我的其余样式?

4

1 回答 1

0

我无法覆盖 ListView 样式中 ListViewItem 上的模板集。

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

于 2016-08-24T18:53:12.767 回答