我在ListViewItem上有一个Style,用于设置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中的所有项目。我发现this question有类似的问题,但是,解决方案根本就不使用Item样式上的Template。我需要保留它。
我通过在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上的模板,同时保留我的其余风格?
答案 0 :(得分:0)
我无法覆盖ListView样式中ListViewItem上的模板集。
为了解决这个问题,我将ListViewItem上的Template替换为我的基本ListView样式中的另一个ItemTemplateSelector。此选择器始终返回我的原始模板。在我的ListView子样式中,使用了新的ItemTemplateSelector。