关于wpf:以Combobox样式覆盖选定项以显示comboxbox的背景而非灰色背景

Override Selected Item in Combobox's style to show comboxbox's background not gray background

我在使用组合框设置自定义属性时遇到问题。我使用的是.Net 4.0,带有xaml资源的WPF,用于在字典中设置的类型以及在app.xaml中设置的某些画笔。我可以找到一个不错的圆角,并使用周围的"边框"技巧在我的组合框中找到渐变和布局。但是我似乎无法使组合框中的"选定项"具有暗灰色以外的背景。我希望将其更改为透明并继承父边框的渐变。但是,我缺少执行此操作的属性或关系。

有人知道如何在xaml中执行此操作吗?

图片:

Combobox Current showings of Selections and selected

码:

字典项目:

1
2
3
4
5
6
7
  <Style TargetType="{x:Type Border}">
        <Setter Property="Background" Value="{StaticResource MoneyBrush}" />
        <Setter Property="BorderBrush" Value="#071C07" />
    <Setter Property="BorderThickness" Value="3" />
    <Setter Property="CornerRadius" Value="20" />
    <Setter Property="SnapsToDevicePixels" Value="True" />
  </Style>

刷入主App.xaml:

1
2
3
4
5
6
7
8
9
10
11
<LinearGradientBrush x:Key="MoneyBrush" EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="#3A883A" Offset="1" />
            <GradientStop Color="#FFFFFF" Offset="0" />
            <GradientStop Color="#FF53AA75" Offset="0.50" />
            <GradientStop Color="#073307" Offset="0.95" />
        </LinearGradientBrush>
<LinearGradientBrush x:Key="FontBrush" EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="Black" Offset="0" />
            <GradientStop Color="#107810" Offset="0.50" />
            <GradientStop Color="Black" Offset="0.65" />
        </LinearGradientBrush>

主窗口中的实际项目:

1
2
3
4
5
6
7
8
9
10
<Border Margin="5">
                    <ComboBox Height="30" Width="170" Margin="10" x:Name="combopersons"
                    FontSize="20"
                    ItemsSource="{Binding Path=People}"
                    DisplayMemberPath="FirstName"
                    SelectedValuePath="PersonId"
                    SelectedValue="{Binding Path=CurrentUser}"
                    Foreground="{StaticResource FontBrush}">
                    </ComboBox>
                </Border>

编辑>>>

我喜欢@iltzortz提出的解决方案,但是我想要一个渐变,因此在这种情况下,它会更好地工作:

1
2
3
4
5
6
7
8
9
10
11
12
<ComboBox.Resources>
    <LinearGradientBrush x:Key="{x:Static SystemColors.WindowBrushKey}">
        <GradientStop Color="#3A883A" Offset="1" />
        <GradientStop Color="#FFFFFF" Offset="0" />
        <GradientStop Color="#FF53AA75" Offset="0.50" />
        <GradientStop Color="#073307" Offset="0.95" />
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}">
        <GradientStop Color="#000000" Offset="1" />
        <GradientStop Color="#FFFFFF" Offset="0" />
    </LinearGradientBrush>
</ComboBox.Resources>

编辑2 >>>

由于某些原因,这仅适用于我在Windows 7的Visual Studio 2012上使用.NET 4.0或更高版本构建的应用程序中。当出于某种原因尝试在家中运行代码时
它不会渲染,我相信这是由于Windows 8或Visual Studio 2010为不同的系统值解释了不同的颜色。请注意,如果您使用的是Windows 8或Visual Studio 2010,因为它可以在一种环境下对我有效,而在另一种环境下却不适用...好奇。


以下代码似乎可以完成工作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<Grid Background="Pink">

    <ComboBox Margin="10,0" Width="100" Height="40">
        <ComboBoxItem>1</ComboBoxItem>
        <ComboBoxItem>2</ComboBoxItem>            
        <ComboBoxItem>3</ComboBoxItem>
        <ComboBox.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.WindowBrushKey}" Color="Green" />
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" />
        </ComboBox.Resources>            
    </ComboBox>

    <TextBox VerticalAlignment="Top" Margin="10"/>
</Grid>