2012-10-17 87 views
1

我有一個WPF應用程序與一個組合框,我想要樣式的項目,但得到一個意外的行爲取決於選擇哪個項目。爲什麼WPF組合框樣式與預期不符?

下面的XAML代碼片段演示了此問題:

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Page.Resources> 
    <Style x:Key="ItemStyle" TargetType="{x:Type ComboBoxItem}"> 
     <Style.Triggers> 
      <Trigger Property="Content" Value="ABC"> 
       <Setter Property="FontStyle" Value="Oblique"/> 
       <Setter Property="Foreground" Value="Red"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
    <Style x:Key="BoxStyle" TargetType="{x:Type ComboBox}"> 
     <Style.Triggers> 
      <Trigger Property="Text" Value="ABC"> 
       <Setter Property="FontStyle" Value="Italic"/> 
       <Setter Property="Foreground" Value="Red"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
    </Page.Resources> 
    <Border Width="200"> 
     <ComboBox Style="{StaticResource BoxStyle}" 
       ItemContainerStyle="{StaticResource ItemStyle}" 
       Height="20"> 
      <ComboBoxItem>ABC</ComboBoxItem> 
      <ComboBoxItem>DEF</ComboBoxItem> 
      <ComboBoxItem>GHI</ComboBoxItem> 
     </ComboBox> 
    </Border> 
</Page> 

這將顯示一個簡單的組合框有三個項目; ABC,DEF和GHI。請注意,ABC在下拉菜單中顯示爲傾斜的紅色文字,選中時也顯示在選擇框中。

但是,如果我再次打開下拉菜單,所有3個項目都顯示爲斜向和紅色。

如果選擇了DEF或GHI項目,則這些項目顯示爲正常字體,黑色,並且再次打開下拉菜單時再次顯示正確 - ABC仍顯示爲斜向,紅色。

我在做什麼錯?

回答

1

這是因爲Dependency Property Value Precedence。當選擇ABC時,DropDown中的ComboBoxItem將從ComboBox繼承FontStyleForeground

這將修復作爲ComboBoxItem旨意不是從ComboBox繼承FontStyle和前景代碼:

<Page.Resources> 
      <Style x:Key="ItemStyle" 
        TargetType="{x:Type ComboBoxItem}"> 
       <Setter Property="FontStyle" 
         Value="Normal" /> 
       <Setter Property="Foreground" 
         Value="Black" /> 
       <Style.Triggers> 
        <Trigger Property="Content" 
          Value="ABC"> 
         <Setter Property="FontStyle" 
           Value="Oblique" /> 
         <Setter Property="Foreground" 
           Value="Red" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
      <Style x:Key="BoxStyle" 
        TargetType="{x:Type ComboBox}"> 
       <Style.Triggers> 
        <Trigger Property="Text" 
          Value="ABC"> 
         <Setter Property="FontStyle" 
           Value="Italic" /> 
         <Setter Property="Foreground" 
           Value="Red" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Page.Resources> 
     <Border Width="200"> 
      <ComboBox Style="{StaticResource BoxStyle}" 
         ItemContainerStyle="{StaticResource ItemStyle}" 
         Height="20"> 
       <ComboBoxItem>ABC</ComboBoxItem> 
       <ComboBoxItem>DEF</ComboBoxItem> 
       <ComboBoxItem>GHI</ComboBoxItem> 
      </ComboBox> 
     </Border> 
+0

大,即解決了這一問題。感謝您的解釋。 –