我有ListView
想要在其中应用自定义ControlTemplate
的项目。定义如下:
<ListView ItemsSource="{Binding MyAwesomeItems}" ...
MyAwesomeItems拥有不同的类。所以我对自己想:“好吧,DataTemplates。”
为了使所包含的项目看起来像我想要的样子,我定义了一个
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使用我为它定义的任何DataTemplate然后将我的项目插入到ContentControl
中。但是,相反,WPF似乎仅使用
.ToString()
项,而不应用任何DataTemplates。这是预期的行为吗?我要实现的目标是:有一个项目列表,其中每个项目的容器看起来都与我想要的方式完全相同,并且该容器的内容来自DataTemplate。
最佳答案
在ControlTemplate
的ContentControl
中,通常使用空的ContentPresenter
标记。在您的情况下:
<ControlTemplate TargetType="ListViewItem">
<Border>
<ContentPresenter/>
</Border>
</ControlTemplate>
ContentPresenter
具有一个ContentSource
属性,该属性默认为“内容”,并设置所有必需的属性(Content
,ContentTemplate
等)。有关详细信息,请参见here。
关于c# - WPF ControlTemplate和DataTemplate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32089575/