WPF 控件模板和数据模板

WPF ControlTemplate AND DataTemplate

我有 ListView,我想对其项目应用自定义 ControlTemplate。它是这样定义的:

<ListView ItemsSource="{Binding MyAwesomeItems}" ...

MyAwesomeItems 持有不同的 类。所以我心想:"Well, hello 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。这是有意为之的行为吗?

我想要实现的是:有一个 项目列表 ,其中每个项目的 容器 看起来完全符合我的要求并且该容器的 content 来自 DataTemplate。

ControlTemplate 中,对于 ContentControl,您通常使用空的 ContentPresenter 标签。你的情况:

<ControlTemplate TargetType="ListViewItem">
    <Border>
        <ContentPresenter/>
    </Border>
</ControlTemplate>

ContentPresenter 有一个 ContentSource 属性,默认为 "Content" 并设置所有必要的属性(ContentContentTemplate、等)。

详情见here