我创建了两个自定义ComboBox
控件,都继承自默认的ComboBox
控件:
public BlueComboBox : ComboBox {}
public WhiteComboBox : ComboBox {}
BlueComboBox
包含一个模板,风格正确,效果很好。
WhiteComboBox
有点复杂。它包含一个由TextBlock
和BlueComboBox
组成的模板。
不正确的代码段,但您应该明白这一点:
<ControlTemplate>
<Grid>
<TextBlock />
<BlueComboBox />
</Grid>
</ControlTemplate>
以下是棘手的部分:由于WhiteComboBox
是ComboBox
控件,我想将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
属性,还是应该使用其他属性?
非常感谢任何帮助。
答案 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属性并将其传递下去,但我尝试的所有内容似乎都没有。