2016-11-07 114 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