Override Selected Item in Combobox's style to show comboxbox's background not gray background
我在使用组合框设置自定义属性时遇到问题。我使用的是.Net 4.0,带有xaml资源的WPF,用于在字典中设置的类型以及在app.xaml中设置的某些画笔。我可以找到一个不错的圆角,并使用周围的"边框"技巧在我的组合框中找到渐变和布局。但是我似乎无法使组合框中的"选定项"具有暗灰色以外的背景。我希望将其更改为透明并继承父边框的渐变。但是,我缺少执行此操作的属性或关系。
有人知道如何在xaml中执行此操作吗?
图片:
码:
字典项目:
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> |