2011-11-15 55 views
4
<ComboBox Grid.Column="1" Grid.Row="1" ItemsSource="{Binding Locations}" SelectedItem="{Binding SelectedLocation}" Margin="5" MinWidth="125"> 
    <ComboBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ComboBoxItem}"> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="true"> 
        <Setter Property="Background" Value="Red" /> 
        <Setter Property="BorderBrush" Value="Red" /> 
        <Setter Property="BorderThickness" Value="2" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.ItemContainerStyle> 
</ComboBox> 

現在邊框被應用,但背景顏色仍然是標準的Windows選擇顏色,我如何覆蓋它?組合框鼠標移過顏色

回答

11

您需要覆蓋您的SystemColors.HighlightBrushKey以覆蓋默認畫筆以突出顯示。添加關鍵是你的組合框資源這樣的 -

<ComboBox Grid.Column="1" Grid.Row="1" ItemsSource="{Binding Locations}" SelectedItem="{Binding SelectedLocation}" Margin="5" MinWidth="125"> 
    <ComboBox.Resources> 
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/> 
    </ComboBox.Resources> 
    <ComboBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ComboBoxItem}"> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="true"> 
        <Setter Property="BorderBrush" Value="Red" /> 
        <Setter Property="BorderThickness" Value="2" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.ItemContainerStyle> 
</ComboBox> 
2

我認爲你需要使用Item模板而不是item容器。

7

確定

我會做到這一點(不改變SystemColors.HighlightBrushKey)

<ComboBox Grid.Column="1" 
      Grid.Row="1" 
      ItemsSource="{Binding Locations}" 
      SelectedItem="{Binding SelectedLocation}" 
      Margin="5" 
      MinWidth="125"> 
    <ComboBox.ItemContainerStyle> 
    <Style TargetType="{x:Type ComboBoxItem}"> 
     <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ComboBoxItem}"> 
      <Border x:Name="Bd" 
        SnapsToDevicePixels="true" 
        Background="{TemplateBinding Background}" 
        BorderBrush="{TemplateBinding BorderBrush}" 
        BorderThickness="{TemplateBinding BorderThickness}" 
        Padding="{TemplateBinding Padding}"> 
       <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
           VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
           SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
      </Border> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsHighlighted" 
         Value="true"> 
       <Setter Property="Background" 
         Value="Red" /> 
       <Setter Property="Foreground" 
         Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" /> 
       <Setter Property="BorderThickness" 
         Value="2" /> 
       <Setter Property="BorderBrush" 
         Value="Blue" /> 
       </Trigger> 
       <Trigger Property="IsEnabled" 
         Value="false"> 
       <Setter Property="Foreground" 
         Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /> 
       </Trigger> 
      </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
     </Setter> 
    </Style> 
    </ComboBox.ItemContainerStyle> 
+0

是什麼讓這個解決方案更好?另一個有缺點嗎? – Peter

+0

爲組合框覆蓋模板而不是爲組合框覆蓋SystemColors.HighlightBrushKey,對我個人而言不是一個好的解決方案。 –

+1

它可能有副作用,也許稍後如果項目樣式中的某個控件使用畫筆 – punker76

0

我有同樣的問題。唯一對我有用的是覆蓋ComboBoxItems模板。

<Style TargetType="ComboBoxItem"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ComboBoxItem}"> 
        <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True"> 
         <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" 
              ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsEnabled" Value="False"> 
          <Setter Property="TextElement.Foreground" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
         </Trigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="IsSelected" Value="False"/> 
           <Condition Property="IsMouseOver" Value="True"/> 
           <Condition Property="IsKeyboardFocused" Value="False"/> 
          </MultiTrigger.Conditions> 
          <Setter Property="Background" TargetName="Bd" Value="Red"/> 
          <Setter Property="BorderBrush" TargetName="Bd" Value="#A826A0DA"/> 
         </MultiTrigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="IsSelected" Value="True"/> 
           <Condition Property="IsMouseOver" Value="False"/> 
           <Condition Property="IsKeyboardFocused" Value="True"/> 
          </MultiTrigger.Conditions> 
          <Setter Property="Background" TargetName="Bd" Value="#3D26A0DA"/> 
          <Setter Property="BorderBrush" TargetName="Bd" Value="#FF26A0DA"/> 
         </MultiTrigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="IsSelected" Value="True"/> 
           <Condition Property="IsMouseOver" Value="True"/> 
          </MultiTrigger.Conditions> 
          <Setter Property="Background" TargetName="Bd" Value="Red"/> 
          <Setter Property="BorderBrush" TargetName="Bd" Value="#99006CD9"/> 
         </MultiTrigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="IsSelected" Value="True"/> 
           <Condition Property="IsMouseOver" Value="False"/> 
           <Condition Property="IsKeyboardFocused" Value="False"/> 
          </MultiTrigger.Conditions> 
          <Setter Property="Background" TargetName="Bd" Value="#3DDADADA"/> 
          <Setter Property="BorderBrush" TargetName="Bd" Value="#FFDADADA"/> 
         </MultiTrigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="IsSelected" Value="False"/> 
           <Condition Property="IsMouseOver" Value="False"/> 
           <Condition Property="IsKeyboardFocused" Value="True"/> 
          </MultiTrigger.Conditions> 
          <Setter Property="BorderBrush" TargetName="Bd" Value="#FF26A0DA"/> 
         </MultiTrigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="IsSelected" Value="False"/> 
           <Condition Property="IsMouseOver" Value="True"/> 
           <Condition Property="IsKeyboardFocused" Value="True"/> 
          </MultiTrigger.Conditions> 
          <Setter Property="Background" TargetName="Bd" Value="Red"/> 
          <Setter Property="BorderBrush" TargetName="Bd" Value="#FF26A0DA"/> 
         </MultiTrigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style>