WPF ControlTemplate和DataTemplate

时间:2015-08-19 07:52:16

标签: c# wpf datatemplate controltemplate

我有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。这是预期的行为吗?

我想要达到的目标是:拥有项目列表,其中每个项目的容器完全按照我想要的方式和内容来自DataTemplate。

1 个答案:

答案 0 :(得分:2)

ControlTemplate的{​​{1}}中,您通常使用空的ContentControl标记。在你的情况下:

ContentPresenter

<ControlTemplate TargetType="ListViewItem"> <Border> <ContentPresenter/> </Border> </ControlTemplate> 有一个ContentPresenter属性,默认为&#34;内容&#34;并设置所有必要的属性(ContentSourceContent等)。

有关详细信息,请参阅here