2011-12-07 97 views
2

我想使用模板化的ComboBoxItems,它包含一個Image和一個Label。如果我將模板分配給ComboBoxItem,我可以以某種方式設置圖像的Source-Property?目標是爲不同的ComboBoxItems使用相同的模板,但每個Item中使用不同的圖片。訪問XAML中控件模板中元素的屬性

我也想過在模板中綁定Image.Source-Property,但是這樣做失敗了,因爲「parent」ComboBoxItem當然沒有我可以綁定的Source-Property。

的代碼說明我的問題:

<Style x:Key="ComboBoxPictureItem" TargetType="{x:Type ComboBoxItem}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ComboBoxItem"> 
        <StackPanel Orientation="Horizontal"> 
         <Image x:Name="StatusImage" /> 
         <Label x:Name="StatusLabel" Content="Green"/> 
        </StackPanel> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <ComboBox> 
     <ComboBoxItem Style="{StaticResource ResourceKey=ComboBoxPictureItem}" 
-> sth. like:   StatusImage.Source="PathToMyImage.png"/> 
    </ComboBox> 

謝謝!

回答

0

您應該使用模板綁定來公開內部屬性,例如綁定標籤的內容到ComboBoxItem的內容:

<Label Content="{TemplateBinding Content}"/> 

如果你現在設置外面被轉移到標籤的內容,可以對圖像做同樣的,你可能會用盡性質的,雖然如此,如果你想以這種方式做事,你可以從ComboBoxItem繼承並創建更多屬性。

在這裏,我不認爲你真的想搞亂控件模板,只需使用ItemTemplate來指定項目的外觀。

+0

使用我自己的類繼承自ComboBoxItem是一種可能的解決方案,我只是認爲可能有一種更簡單的方法。感謝您使用ItemTemplate的提示,這比我使用完整的新ControlTemplate要多得多。如下所示,我將使用DataTemplate作爲項目:http://msdn.microsoft.com/en-us/library/ms742521.aspx來解決問題。 – schoola