わかる方いますか、
WPFでクリック(ComboBoxが開いている)しているときにコンボボックスの背景色を変更する方法は?
少し素朴なアプローチを次に示します。
<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 つの問題があります。
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
、このプロパティに対して実際にはあまり適切なサポートを提供しないためです。Background
Aero テーマの外観は、ComboBox
実際にはカスタム背景色をサポートするように設計されていないため、コントロール用に独自のカスタム外観を作成する必要があります。
さて、コードビハインドの質問に答えるには:
コンボ ボックスにアイテムを追加します。
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 の背景色を変更する必要があります。