2015-08-19 127 views
3

我有ListView我想在其中的項目中應用自定義的ControlTemplate。它是這樣定義的:WPF ControlTemplate AND DataTemplate

<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中的列表。

+1

改爲使用ContentPresenter。區別在於如何設置'DataContext'。 –

+0

沒關係。同樣的結果。 – Hemisphera

+0

我忘了提及:不要設置「內容」!只需使用。 –

回答

2

ControlTemplate對於ContentControl您通常使用空的ContentPresenter標記。你的情況:

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

ContentPresenterContentSource屬性默認爲「內容」,並將所有必要的屬性(ContentContentTemplate等)。

查看here瞭解詳情。