2016-04-09 6 views
1

Ich werde verrückt, dass ich nur nicht die Farbe der ComboBox ändern kann. Habe versucht, die Hintergrundeigenschaft rechts auf der ComboBox zu verwenden, aber nichts passiert.Ändern Hintergrundfarbe für eine ComboBox, ändert es überhaupt nicht

Habe auch versucht, einen Style-Block zu verwenden und die Hintergrundfarbe einzustellen, aber das funktioniert auch nicht.

-Code

<ComboBox Padding="7" Height="34" Background="#ffffff"> 
      <ComboBox.Resources> 
       <Style x:Key="{x:Type ComboBox}" TargetType="ComboBox"> 
        <Setter Property="Background" Value="red" /> 
        <Setter Property="BorderThickness" Value="1" /> 
        <Setter Property="BorderBrush" Value="black" /> 
       </Style> 
      </ComboBox.Resources> 
      <ComboBoxItem IsSelected="True">1 - Room</ComboBoxItem> 
      <ComboBoxItem>2 - Rooms</ComboBoxItem> 
      <ComboBoxItem>3 - Rooms</ComboBoxItem> 
      <ComboBoxItem>4 - Rooms</ComboBoxItem> 
      <ComboBoxItem>5+ - Rooms</ComboBoxItem> 
     </ComboBox> 

Obwohl, dass ich die Hintergrundfarbe weiß, gesetzt haben es nach wie vor nur die Standard-graue Farbe.

Hier können Sie sehen, wie es aussieht:

enter image description here

Hoffnung jemand kann mir sagen, was ich falsch mache?

+0

Überprüfen Sie diese [Antwort] (http://stackoverflow.com/questions/22695145/wpf-change-background-color-of-a-combobox). Sieht so aus, als müssten Sie Ihre eigene ControlTemplate implementieren. –

Antwort

1

hier sind einige Sachen, die meiner Meinung nach Ihnen helfen kann:

  1. Entfernen Sie die Hintergrunddefinition aus der ComboBox-Deklaration (Background = "# ffffff").
  2. Verschieben Sie die Deklaration von Combo-Elementen in das Kombinationsfeld, das Grid enthält, da ItemTemplate und ItemTemplateSelector für Elemente des Containers von ItemsControl bereits ignoriert werden.
  3. Implementieren Sie den Datenvorlagenselektor, um Datenvorlagen der Kombination zu unterstützen (eine für das ausgewählte Element, eine zweite für die auszuwählenden Elemente).

ist die XAML-Code

<Grid> 
    <Grid.Resources> 
     <x:Array Type="{x:Type system:String}" x:Key="MyRoomsArray"> 
      <system:String>1 - Room</system:String> 
      <system:String>2 - Rooms</system:String> 
      <system:String>3 - Rooms</system:String> 
      <system:String>4 - Rooms</system:String> 
      <system:String>5+ - Rooms</system:String> 
     </x:Array> 
    </Grid.Resources> 
    <ComboBox Padding="7" Height="34" SelectedIndex="0" ItemsSource="{StaticResource MyRoomsArray}"> 
     <ComboBox.Resources> 
      <DataTemplate x:Key="ItemToSelect"> 
       <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
        <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
          Background="Red" 
          BorderBrush="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ComboBox}, Path=BorderBrush, UpdateSourceTrigger=PropertyChanged}" 
          BorderThickness ="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ComboBox}, Path=BorderThickness, UpdateSourceTrigger=PropertyChanged}"> 
         <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Text="{Binding }" /> 
        </Border> 
       </Grid> 
      </DataTemplate> 
      <DataTemplate x:Key="SelectedItem"> 
       <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
        <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
          Background="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ComboBox}, Path=Background, UpdateSourceTrigger=PropertyChanged}" 
          BorderBrush="Transparent" 
          BorderThickness ="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ComboBox}, Path=BorderThickness, UpdateSourceTrigger=PropertyChanged}"> 
         <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Text="{Binding }" /> 
        </Border> 
       </Grid> 
      </DataTemplate> 
      <wpfComboBAckground:ComboDataTemplateSelector x:Key="ComboDataTemplateSelector" Selected="{StaticResource SelectedItem}" ItemToSelect="{StaticResource ItemToSelect}"/> 
      <Style TargetType="ComboBox"> 
       <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
       <Setter Property="VerticalContentAlignment" Value="Stretch"/> 
       <Setter Property="Background" Value="Red" /> 
       <Setter Property="BorderThickness" Value="1" /> 
       <Setter Property="BorderBrush" Value="Black" /> 
       <Setter Property="ItemTemplateSelector" Value="{StaticResource ComboDataTemplateSelector}"/> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Background" Value="Transparent"></Setter> 
        </Trigger> 
        <Trigger Property="IsMouseOver" Value="False"> 
         <Setter Property="Background" Value="Red"></Setter> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </ComboBox.Resources> 
    </ComboBox> 
</Grid> 

die Datenvorlage Selektor Hier wird

public class ComboDataTemplateSelector : DataTemplateSelector 
{ 
    public override DataTemplate SelectTemplate(object item, DependencyObject container) 
    { 
     var selected = false; 
     // container is the ContentPresenter 
     FrameworkElement fe = container as FrameworkElement; 
     if (fe == null) return ItemToSelect; 
     var cbo = fe.TemplatedParent as ComboBox; 

     if (cbo != null) 
      selected = true; 

     return selected ? Selected : ItemToSelect; 
    } 

    public DataTemplate Selected { get; set; } 

    public DataTemplate ItemToSelect { get; set; } 
} 

Wie es aussieht: here

Grüße.

Verwandte Themen