与this SO问题类似,我试图尽可能轻松地设置ComboBoxItems的样式。但是,我正在根据ComboBox的默认样式here制作自定义样式。
<Style x:Key="MultiComboBox" TargetType="{x:Type ComboBox}">
<Style.Resources>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="Style" Value="{StaticResource MultiComboBoxItem}"/>
</Style>
</Style.Resources>
<Setter Property="SnapsToDevicePixels" Value="true" />
<!--<Setter Property="OverridesDefaultStyle" Value="true" />-->
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
...
...
</Style>
.
.
.
<ComboBox Style="{StaticResource MyComboBox}">
<ComboBoxItem x:Name="First">First</ComboBoxItem>
<ComboBoxItem x:Name="Second">Second</ComboBoxItem>
<ComboBoxItem x:Name="Third">Third</ComboBoxItem>
</ComboBox>
我将<Style.Resources>
位添加到顶部,希望在这里只需要一个引用,而不是单独将它添加到嵌套元素,或者甚至需要首先将它添加到元素中。另外,我评论了所有OverridesDefaultStyle
Setters。
但是,然后我得到一个XAMLparseexception,&#34;不允许Style对象影响它所适用的对象的Style属性&#34;。这个错误本身是有道理的,但我认为,因为我定位ComboBoxItem
它应该有效。有办法解决这个问题吗?
答案 0 :(得分:5)
不允许Style对象影响它应用的对象的Style属性
有问题的行是这些:
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="Style" Value="{StaticResource MultiComboBoxItem}"/>
</Style>
尝试将其重写为
<Style TargetType="{x:Type ComboBoxItem}" BasedOn="{StaticResource MultiComboBoxItem}">
</Style>
或者更好地使用ItemContainerStyle
属性:
<Style x:Key="MultiComboBox" TargetType="{x:Type ComboBox}">
<Setter Property="ItemContainerStyle" Value="{StaticResource MultiComboBoxItem}" />
<Setter Property="SnapsToDevicePixels" Value="true" />
<!--<Setter Property="OverridesDefaultStyle" Value="true" />-->
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
</Style>