2010-11-02 48 views
3

我爲我的寵物項目中的一些DataTypes創建了幾個DataTemplates。 這些數據模板非常酷,因爲它們像魔術一樣工作,隨時隨地在UI中顯示數據類型實例的外觀。 現在我想能夠在一個特定的ListBox中更改這些DataType的DataTemplate。這是否意味着我必須停止依靠WPF自動將數據模板應用於數據類型,並將x:Key分配給DataTemplates,然後使用該密鑰在UI中應用Template/ItemTemplate?數據類型的DataTemplate - 如何覆蓋特定列表框中的這個DataTemplate?

一個列表框包含各種數據類型的項目(都是從一個公共基類派生的),現在它們都是神奇的工作而沒有指定一個TemplateSelector,因爲正確的模板是由項目的實際數據類型列表框。如果我使用x:Key來應用DataTemplates,那麼我需要編寫一個TemplateSelector?

我是新手,只用DataTemplates做實驗。有一刻我想,哇,多酷!然後我想爲不同的列表框中的相同數據類型使用不同的數據模板和ooops,我不能這樣做:-)請幫忙嗎?

回答

3

可以具體指定ItemTemplateListBox

<ListBox> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <!-- your template here --> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

或者,如果你已經在ResourceDictionary定義了DataTemplate地方:

<DataTemplate x:Key="MyTemplate"> 
     <!-- your template here --> 
</DataTemplate> 

然後,你可以參考它的使用:

<ListBox ItemTemplate="{StaticResource MyTemplate}" /> 

你並不需要編寫這兩種方法的模板選擇工作


響應意見

下面的例子演示定義了默認的DataTemplate的數據類型(在這種情況下,String)的一個窗口,然後overridding一個ListBox中:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:sys="clr-namespace:System;assembly=mscorlib" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <DataTemplate DataType="{x:Type sys:String}"> 
      <Rectangle Height="10" Width="10" Margin="3" Fill="Red" /> 
     </DataTemplate> 
    </Window.Resources> 
    <Grid> 
     <ListBox> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Rectangle Height="10" Width="10" Margin="3" Fill="Blue" /> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 

      <sys:String>One</sys:String> 
      <sys:String>Two</sys:String> 
      <sys:String>Three</sys:String> 
     </ListBox> 
    </Grid> 
</Window> 

這親duces以下界面:

Example Display

+0

的DataTemplate中我有我的ResourceDictionary是針對某一特定數據類型和WPF應用模板,該數據類型的任何實例無論自動顯示出來,所以即使當我設置的ItemTemplate列表框到{x:Null},項目仍然顯示模板。 – 2010-11-02 10:56:20

+0

如果您將'ItemTemplate'設置爲'{x:Null}',我希望它使用默認模板 - 如果您明確指定模板,是否還會得到相同的行爲? – 2010-11-02 11:00:36

+0

感謝您的留言。我設法將一個不同的ItemTemplate應用於昨天在'特殊'列表框中的元素,我不記得究竟是什麼問題,這是微妙的。但問題的一部分仍然存在 - 因爲列表框中有三種不同類型的對象。對於這些數據類型,我指定了一個DataTemplate,現在,在一個特定的列表框中,我希望這些數據類型看起來不同。我可以明確地設置ItemTemplate,然後覆蓋之前提到的數據模板,然而,然後我只能得到所有三種類型的一個數據模板。 – 2010-11-03 09:54:06

相關問題