我有ListView
我希望在其中应用自定义ControlTemplate
项。它的定义如下:
<ListView ItemsSource="{Binding MyAwesomeItems}" ...
MyAwesomeItems拥有不同的类。所以我心想:&#34;好吧,你好DataTemplates。&#34;
为了让所包含的项目看起来像我想要的那样,我已经定义了ControlTemplate
这样:
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Border><ContentControl Content="{TemplateBinding Content}"/></Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
我使用ContentControl
绑定到TemplateBinding Content
。我希望WPF然后将我的项目插入到ContentControl
中,使用我为其定义的任何DataTemplate。
但相反,看起来WPF只使用项.ToString()
并且不应用任何DataTemplates。这是预期的行为吗?
我想要达到的目标是:拥有项目列表,其中每个项目的容器完全按照我想要的方式和内容该容器的strong>来自DataTemplate。
答案 0 :(得分:2)
在ControlTemplate
的{{1}}中,您通常使用空的ContentControl
标记。在你的情况下:
ContentPresenter
<ControlTemplate TargetType="ListViewItem">
<Border>
<ContentPresenter/>
</Border>
</ControlTemplate>
有一个ContentPresenter
属性,默认为&#34;内容&#34;并设置所有必要的属性(ContentSource
,Content
等)。
有关详细信息,请参阅here。