在wpf中更改Selected-Unfocused ComboBox项的颜色

时间:2014-03-07 20:01:54

标签: wpf xaml

我想在ComboBox中更改SelectedUnfocused(Item marked with red border in image below)项的颜色。

所以,我试图改变组合框的控制模板。

从MSDN复制ControlTemplate之前:

enter image description here

从MSDN复制ControlTemplate后:

enter image description here

因此,该模板改变了我控制的整体外观。我不想改变那些颜色。

Here is the MSDN link获取我使用的模板。

2 个答案:

答案 0 :(得分:2)

仅添加链接页面中的ComboBoxItem样式和样式中使用的relevant brushes 。无需覆盖完整的模板。

只在XAML中复制/粘贴这么多代码,你就可以了:

<Color x:Key="SelectedBackgroundColor">#FFC5CBF9</Color>
<Color x:Key="SelectedUnfocusedColor">#FFDDDDDD</Color> <-- Update color here

<Style x:Key="{x:Type ComboBoxItem}"
       TargetType="{x:Type ComboBoxItem}">
  <Setter Property="SnapsToDevicePixels"
          Value="true" />
  <Setter Property="OverridesDefaultStyle"
          Value="true" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ComboBoxItem}">
        <Border x:Name="Border"
                Padding="2"
                SnapsToDevicePixels="true"
                Background="Transparent">
          <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="SelectionStates">
              <VisualState x:Name="Unselected" />
              <VisualState x:Name="Selected">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
                                                Storyboard.TargetProperty="(Panel.Background).
                    (SolidColorBrush.Color)">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource SelectedBackgroundColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
              <VisualState x:Name="SelectedUnfocused">
                <Storyboard>
                  <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
                                                Storyboard.TargetProperty="(Panel.Background).
                    (SolidColorBrush.Color)">
                    <EasingColorKeyFrame KeyTime="0"
                                         Value="{StaticResource SelectedUnfocusedColor}" />
                  </ColorAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
          </VisualStateManager.VisualStateGroups>
          <ContentPresenter />
        </Border>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

答案 1 :(得分:1)

如果您只想更改ComboBoxItem样式而不是ComboBox样式,只需从XAML中移除Style TargetType="ComboBox",只留下相关的Style TargetType="ComboBoxItem链接的MSDN页面。