2010-01-20 159 views
0

我創建了兩個自定義ComboBox控制,無論是從默認ComboBox控制繼承:自定義組合框控件裏面的其他自定義組合框控件,如何綁定項目?

public BlueComboBox : ComboBox {} 
public WhiteComboBox : ComboBox {} 

BlueComboBox包含模板和正確的風格和完美的作品。 WhiteComboBox有點複雜。它包含一個由TextBlockBlueComboBox組成的模板。

代碼段不正確,但你應該得到的想法:

<ControlTemplate> 
    <Grid> 
    <TextBlock /> 
    <BlueComboBox /> 
    </Grid> 
</ControlTemplate> 

這裏是棘手的部分:因爲WhiteComboBoxComboBox控制,我想在BlueComboBox結合的項目在我的WhiteComboBox控制設置的。

<WhiteComboBox> 
    <ComboBoxItem Content="Foo" /> 
    <ComboBoxItem Content="Bar" /> 
</WhiteComboBox> 

我想結合在模板中使用到我的WhiteComboBoxItemsSource財產BlueComboBox實體的ItemSource,但似乎並沒有工作:

<ControlTemplate> 
    <Grid> 
    <TextBlock /> 
    <BlueComboBox ItemsSource="{TemplateBinding ItemsSource}" /> 
    </Grid> 
</ControlTemplate> 

什麼是使用的正確方法在我的WhiteComboBox實例中定義的項目到BlueComboBox實例?我是否錯誤地使用了ItemsSource屬性,還是應該使用另一個屬性?

任何幫助將不勝感激。

回答

0

你可以嘗試使用的RelativeSource綁定:

<ControlTemplate> 
    <Grid> 
    <TextBlock /> 
    <BlueComboBox ItemSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}, Path=Items}" /> 
    </Grid> 
</ControlTemplate> 

順便說一句,在WPF通常的做法是使用樣式改變的控制視覺方面,而不是創造派生類型。

+0

謝謝你,這個伎倆。 我正在使用樣式,但每個組合框類型包含額外的DependencyProperties,因爲我相當新的創建我自己的自定義控件基於他們是最簡單的方法來做到這一點。 – Jensen 2010-01-20 14:58:14

0

我遇到了第二個問題。

我設計了ItemContainerStyle屬性並設置了一個SystemColors.HighlightBrushKey值。當我自己使用BlueComboBox時,當我將鼠標懸停在某個項目上時,該功能完美無缺。但是,當我將我的BlueComboBox嵌入到新控件中時,當我使用ItemsSource模板綁定時不再有效。當我直接將我的控件模板中的一些ComboBoxItem添加到BlueComboBox項目時,它再次運行。當我明確點擊一個項目時它也可以工作。

我試着在我的WhiteComboBox控件模板上設置ItemContainerStyle屬性並將其傳遞給下方,但我所嘗試的任何東西似乎都無能爲力。