WPF样式嵌套样式

时间:2016-11-07 19:39:13

标签: c# wpf xaml styles

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它应该有效。有办法解决这个问题吗?

1 个答案:

答案 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>
相关问题