自定义ComboBox控件里面的其他自定义ComboBox控件,如何绑定Items?

时间:2010-01-20 14:41:10

标签: .net wpf xaml data-binding combobox

我创建了两个自定义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>

我尝试将模板中使用的BlueComboBox实体的ItemSource绑定到我的ItemsSource的{​​{1}}属性,但这似乎不起作用:

WhiteComboBox

<ControlTemplate> <Grid> <TextBlock /> <BlueComboBox ItemsSource="{TemplateBinding ItemsSource}" /> </Grid> </ControlTemplate> 实例中定义的项目用于WhiteComboBox实例的正确方法是什么?我是否错误地使用了BlueComboBox属性,还是应该使用其他属性?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用RelativeSource绑定:

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

另外,WPF中的常规做法是使用样式来改变控件的可视方面,而不是创建派生类型。

答案 1 :(得分:0)

我遇到了第二个问题。

我设置了ItemContainerStyle属性并设置了SystemColors.HighlightBrushKey值。当我单独使用BlueComboBox时,当我将鼠标悬停在某个项目上时,这种方式非常有效。但是,当我在我的新控件中嵌入我的BlueComboBox时,当我使用ItemsSource模板绑定时,这不再起作用了。当我直接在我的控件模板中添加一些ComboBoxItems到BlueComboBox项时,它再次工作。当我明确点击某个项目时,它也有效。

我尝试在我的WhiteComboBox控件模板上设置ItemContainerStyle属性并将其传递下去,但我尝试的所有内容似乎都没有。