如何在WPF中为ListViewItem引用默认样式ControlTemplate?

时间:2019-08-16 05:29:27

标签: c# wpf listview controltemplate

在WPF中,如果我将[id, animal_name, person_name, city_name, noise] 1 dog tom ny woof 2 cat joe sf hello 3 frog ron la honk 应用于GridView,则它将自动将ListView的{​​{1}}属性更改为一个Template使用ListViewItem而不是ControlTemplate。这通常是您想要的。

尽管如此,我还是想保留原始的GridViewRowPresenter,以便呈现ContentPresenter中的ContentPresenter

(出于好奇:我正在做一个父子操作,其中的列实际上是子元素的元素,因此尽管我仍然有一个ItemTemplate,但它位于{{1 }}中的ListView

可以通过在GridViewRowPresenter上设置ItemTemplate并将其中的ListView属性设置为自定义ItemContainerStyle来做到这一点,因为这将覆盖ListView应用的样式设置器。

但是这真的很罗word(特别是保持选择的颜色),并且破坏了自然主题的支持,除非我为每个主题制作模板的重复副本,这绝对是愚蠢的。

我真正想做的就是写这个:

Template

后者绕过ControlTemplate设置的GridView并获得正常<Setter Property="Template" Value="{StaticResource {FindDefaultControlTemplate ListViewItem}}" /> 会使用的ControlTemplate

或者,如果有某种方法可以告诉GridView完全不改变ControlTemplate样式,那么这也适用于我的情况。

这必须在XAML中起作用。

1 个答案:

答案 0 :(得分:0)

魔咒似乎是要设置这种样式:

ListViewItem

显然GridView本身没有默认样式,但ListViewItem却有默认样式。

这确实会覆盖<ListView.ItemContainerStyle> <Style TargetType="ListViewItem" BasedOn="{StaticResource {x:Type ListBoxItem}}" /> </ListView.ItemContainerStyle> 所做的一切,并使它再次使用普通的ListViewItem