我有两个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}}
这是为什么?我该怎么做才能阻止Enum {{1}}继承隐式{{1}}样式?
答案 0 :(得分:2)
我的假设是DisplayMemberPath
会创建DataTemplate
,并且不会在其范围内应用样式。
尝试设置DisplayMemberPath="."
以使第一个ComboBox
使用包含DataTemplate
的{{1}},这将阻止隐式样式被应用。