我有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。

最佳答案

ControlTemplateContentControl中,通常使用空的ContentPresenter标记。在您的情况下:

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


ContentPresenter具有一个ContentSource属性,该属性默认为“内容”,并设置所有必需的属性(ContentContentTemplate等)。

有关详细信息,请参见here

关于c# - WPF ControlTemplate和DataTemplate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32089575/

10-08 22:17