使用DataTemplateSelector覆盖项样式模板

时间:2016-08-19 15:30:46

标签: wpf xaml datatemplate datatemplateselector

我在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上的模板,同时保留我的其余风格?

1 个答案:

答案 0 :(得分:0)

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

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