2013-02-12 12 views

Antwort

2

Hier ist ein etwas naiver Ansatz:

<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> 

Zunächst stellt dies die Background Eigenschaft auf Green, aber arrangiert für sie zu Red gehen, wenn die Dropdown-angezeigt. Allerdings gibt es zwei Probleme:

  1. In einigen Windows-Themen (zB das Aero-Design verwendet in Vista und Windows 7), der grünen Hintergrund durch die bläuliche Farbe verdeckt wird, das Thema, um anzuzeigen, verwendet, dass der Drop-Down des Taste wurde gedrückt. Die Schaltfläche wird also kurz grün, bevor sie auf Cyan übergeht.
  2. Die Eigenschaft ComboBox.Background betrifft nur das Erscheinungsbild der Schaltfläche selbst und nicht die Dropdown-Liste. Es ist möglich, dass Sie die Hintergrundfarbe des Teils, der angezeigt wird, ändern möchten.

Wenn 2 ist das, was man wollte, tut dies der Trick:

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

Streng genommen, dass tatsächlich ist die Hintergrundfarbe der ComboBoxItem Kontrollen zu ändern, die in der Dropdown-Liste erscheinen, aber das wird die gewünschte Wirkung haben .

Wenn Sie jedoch 1 reparieren möchten, benötigen Sie eine benutzerdefinierte Vorlagen, weil die integrierte Vorlage ComboBox nicht wirklich sehr gute Unterstützung für die Background-Eigenschaft bietet, da es die Farbe der Schaltfläche Teil ändert unter verschiedenen Umständen. Das Aero-Thema sucht nach einer ComboBox ist wirklich nicht entworfen, um eine benutzerdefinierte Hintergrundfarbe zu unterstützen, so dass Sie Ihr eigenes Aussehen für das Steuerelement erstellen müssen.

0

Okay, Ihre Frage Code hinter zu beantworten:

Liste Artikel zu Ihrem Kombinationsfeld:

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

Dann können Sie den Artikel Hintergrundfarbe ändern:

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

Also im Grunde Sie müssen die Hintergrundfarbe des ComboBoxItem ändern.

0

Zuerst müssen Sie die Standardvorlage für die Combobox (unten Details, wenn Sie sie benötigen) erhalten. Dann setzen Sie diese XAML innerhalb des ersten „ControlTemplate.Triggers“ tag:

<DataTrigger Binding="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" Value="True"> 
    <Setter Property="Background" TargetName="templateRoot" Value="Red"/> 
</DataTrigger> 

Ihre Combobox Taste Rot sein wird, wenn das Drop-Down geöffnet ist.

Um die Standard-Vorlage: In Visual Studio 2015 Ihre Seite im Entwurfsmodus anzuzeigen. Klicken Sie dann mit der rechten Maustaste auf die Combobox und wählen Sie "Vorlage bearbeiten-> Kopie bearbeiten". Dadurch wird die Standardvorlage für Sie generiert.

Verwandte Themen