【问题标题】:Override Selected Item in Combobox's style to show comboxbox's background not gray background覆盖组合框样式中的选定项目以显示组合框的背景而不是灰色背景
【发布时间】:2014-04-07 21:25:41
【问题描述】:

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

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

图片:

代码:

字典项:

  <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:

<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>

主窗口中的实际项目:

<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 提出的解决方案,但我想要一个渐变,所以在这种情况下效果会更好:

<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,请注意这一点,因为它适用于一种环境,但不适用于另一种环境......很好奇。

【问题讨论】:

    标签: wpf xaml binding


    【解决方案1】:

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

    <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>
    

    【讨论】:

    • 也可以试试 SystemColors.ControlBrushKey
    • 这只会使图片的第一部分具有所有四个框的统一颜色。一旦选择为指定的颜色,它仍然不会设置“设置”项目。我需要弄清楚那个属性。我试图覆盖很多 SystemColors 却没有找到它。
    • 我编辑了我的答案,你能检查一下这是否得到了你想要的结果吗?如果我理解得很好,这似乎会得到你想要的结果
    • 您在正确的轨道上,但您设置的是纯色而不是渐变。我得到了我需要的属性,所以我会给你答案。我最后的财产我编辑了你的答案,希望你不介意。
    猜你喜欢
    • 2014-11-22
    • 2022-12-06
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多