在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中起作用。
答案 0 :(得分:0)
魔咒似乎是要设置这种样式:
ListViewItem
显然GridView
本身没有默认样式,但ListViewItem
却有默认样式。
这确实会覆盖<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem"
BasedOn="{StaticResource {x:Type ListBoxItem}}" />
</ListView.ItemContainerStyle>
所做的一切,并使它再次使用普通的ListViewItem
。