2016-11-07 68 views
0

this相似SO问题,我试图尽可能轻松地调整ComboBoxItems的样式。但是,我正在基于ComboBox的默认样式here制作自定义样式。WPF从样式中嵌套元素

<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安装者。

但是,我得到一个XAMLparseexception,“样式对象不允许影响它所应用的对象的样式属性”。错误本身是有道理的,但我认为,因为我的目标是ComboBoxItem它应该工作。有没有解决的办法?

回答

2

的Style对象不得影响其适用

有问题的线是这些对象的Style属性:

<Style TargetType="{x:Type ComboBoxItem}"> 
    <Setter Property="Style" Value="{StaticResource MultiComboBoxItem}"/> 
</Style> 

尝试重写他们作为

<Style TargetType="{x:Type ComboBoxItem}" BasedOn="{StaticResource MultiComboBoxItem}"> 
</Style> 

或者更好的使用ItemContainerStyle property:

<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> 
+0

谢谢。我在前面的问题中看到,但他们对“ItemContainerStyle”采取行动的方式让我觉得这不是我的正确答案。谢谢你让我挺直。只要SO允许,我会尽快接受这个答案。 –

+0

现在我的问题是,我将如何为StackPanel执行此操作? –

+0

@SanjayCruze,StackPanel究竟应该做什么? – ASh