当未设置DisplayMemberPath时,如何阻止隐式TextBox样式在ComboBox中继承?

时间:2012-08-30 19:36:54

标签: wpf styles implicit-style

我有两个ComboBoxes。一个绑定到枚举值列表,另一个绑定到自定义类对象列表,并设置DisplayMemberPath属性。

绑定到枚举值的ComboBox应用隐式TextBlock样式,而使用ComboBox属性的DisplayMemberPath则不应。

使用Snoop我可以验证两个ComboBoxes都使用完全相同的控件集(<ContentPresenter>包含<TextBlock>)来呈现,但是TextBlock } ComboBox中没有DisplayMemberPath集的Margin包含DisplayMemberPath,而<Grid.Resources> <Style TargetType="{x:Type TextBlock}"> <Setter Property="Margin" Value="5" /> </Style> </Grid.Resources> <ComboBox Grid.Row="0" Grid.Column="1" ItemsSource="{Binding EnumCollection}" SelectedItem="{Binding SelectedEnum}" /> <ComboBox Grid.Column="1" Grid.Row="2" ItemsSource="{Binding SomeCollection}" SelectedItem="{Binding SelectedItem}" DisplayMemberPath="Name" /> 设置的ComboBox不包含TextBlock

{{1}}

Screenshot

这是为什么?我该怎么做才能阻止Enum {{1}}继承隐式{{1}}样式?

1 个答案:

答案 0 :(得分:2)

我的假设是DisplayMemberPath会创建DataTemplate,并且不会在其范围内应用样式。

尝试设置DisplayMemberPath="."以使第一个ComboBox使用包含DataTemplate的{​​{1}},这将阻止隐式样式被应用。