7

わかる方いますか、

WPFでクリック(ComboBoxが開いている)しているときにコンボボックスの背景色を変更する方法は?

4

3 に答える 3

2

少し素朴なアプローチを次に示します。

<ComboBox
  ItemsSource="{x:Static Fonts.SystemFontFamilies}"
  Width="100"
  >
  <ComboBox.Style>
    <Style TargetType="ComboBox">
      <Setter Property="Background" Value="Green" />
      <Style.Triggers>
        <Trigger Property="IsDropDownOpen" Value="True">
          <Setter Property="Background" Value="Red" />
        </Trigger>
      </Style.Triggers>
    </Style>
  </ComboBox.Style>
</ComboBox>

最初は、これによりBackgroundプロパティが に設定されますが、ドロップダウンが表示されたときにプロパティGreenが に移動するように調整されます。Redただし、これには 2 つの問題があります。

  1. 一部の Windows テーマ (Vista や Windows 7 で使用される Aero テーマなど) では、ドロップダウンのボタンが押されたことを示すためにテーマが使用する青みがかった色によって、緑の背景が見えなくなります。そのため、ボタンはシアンにフェードする前に一時的に緑色になります。
  2. このComboBox.Backgroundプロパティは、ボタン自体の外観にのみ影響し、ドロップダウン リストには影響しません。実際にやりたいことは、ポップ ダウンする部分の背景色を変更することである可能性があります。

2 が必要な場合は、これでうまくいきます。

<ComboBox
  ItemsSource="{x:Static Fonts.SystemFontFamilies}"
  Width="100"      >
  <ComboBox.Resources>
    <Style TargetType="ComboBoxItem">
       <Setter Property="Background" Value="Orange" />
    </Style>
  </ComboBox.Resources>
</ComboBox>

厳密に言えば、これComboBoxItemはドロップダウンに表示されるコントロールの背景色を実際に変更することですが、それは望ましい効果をもたらします。

ただし、1 を修正したい場合は、カスタム テンプレートが必要になります。組み込みのテンプレートは、さまざまな状況でボタン部分の色を変更するためComboBox、このプロパティに対して実際にはあまり適切なサポートを提供しないためです。BackgroundAero テーマの外観は、ComboBox実際にはカスタム背景色をサポートするように設計されていないため、コントロール用に独自のカスタム外観を作成する必要があります。

于 2013-02-25T17:05:41.680 に答える
0

さて、コードビハインドの質問に答えるには:

コンボ ボックスにアイテムを追加します。

foreach (String tag in tags)
{
    ComboBoxItem item = new ComboBoxItem();
    item.Content = tag;
    cbTags.Items.Add(item);
}

次に、アイテムの背景色を変更できます。

((ComboBox)o).Background = GetBrushByRGB(r, g, b);
foreach (ComboBoxItem item in ((ComboBox)o).Items)
{
    item.Background = GetBrushByRGB(r, g, b);
}

したがって、基本的には ComboBoxItem の背景色を変更する必要があります。

于 2014-10-27T16:07:47.040 に答える