1

アイテムのスタイルを設定したい ComboBox を備えた 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>

これにより、3 つの項目を持つ単純な ComboBox が表示されます。ABC、DEF、GHI。ABC は、斜めの赤いテキストでドロップダウンに表示され、選択すると選択ボックスにも表示されることに注意してください。

ただし、ドロップダウンを再度開くと、3 つのアイテムすべてが斜めに赤く表示されます。

DEF または GHI 項目が選択されている場合、これらは通常のフォント、黒で表示され、ドロップダウンを開くと再び正しく表示されます - ABC は斜めの赤で表示されます。

私は何を間違っていますか?

4

1 に答える 1

1

これはDependency Property Value Precedenceによるものです。ABC が選択されている場合ComboBoxItem、ドロップダウンの はからFontStyleおよびを継承します。ForegroundComboBox

ComboBoxItemこれにより、 s が ComboBox から FontStyle と Foreground を継承しないため、コードが修正されます。

    <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>
于 2012-10-17T14:09:03.127 に答える