选择项目后更改组合框背景和前景

本文关键字:背景 组合 项目 选择 | 更新日期: 2023-09-27 18:33:30

我已经浏览了本网站上提供的所有答案,以寻找我问题的答案,但我找不到可行的解决方案。

我有一个组合框,它使用 ItemsSource 属性绑定到一个类。

类定义如下:

public class DataSource
{
    public string DisplayField { get; set; }
    public string ValueField { get; set; }
}

组合框绑定为使用 DisplayMemberPath = "DisplayField" 和 SelectedValuePath = "ValueField"...这是在代码隐藏中完成的,并在窗口加载时加载。

组合框的定义如下:

<ComboBox Grid.Row="0" Grid.Column="1" Margin="5 5 5 0" Name="releaseHoldDropDown" Width="100"/>  

如果下拉列表的值更改为"发布",我需要一种方法将背景更改为绿色,将前景更改为白色。

如果下拉列表的值更改为"保持",我还需要将背景更改为红色,将前景更改为白色。

仅供参考:我正在使用ExpressionLight.xaml主题来设置整个应用程序的样式。

作为旁注,我还想要一种方法将我所有组合框的背景从灰色更改为白色,以使它们更具可读性。所以我需要修改 ExpressionLight.xaml,但我不知道要编辑哪个部分来进行这些更改。

任何帮助将不胜感激。

谢谢

选择项目后更改组合框背景和前景

为什么不使用style.trigger?

        <ComboBox.Style>
            <Style TargetType="ComboBox">
                <Setter Property="Background" Value="Transparent"/>
                <Setter Property="Foreground" Value="Black"/>
                <Style.Triggers>
                    <Trigger Property="SelectedValue" Value="Release">
                        <Setter Property="Background" Value="Green"/>
                        <Setter Property="Foreground" Value="White"/>
                    </Trigger>
                    <Trigger Property="SelectedValue" Value="Hold">
                        <Setter Property="Background" Value="Red"/>
                        <Setter Property="Foreground" Value="White"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ComboBox.Style>

这对你来说可能是一个开始

由于您只想更改前景色而不是背景色(保持白色(,因此releaseHoldDropDown_SelectionChanged事件使用

private void releaseHoldDropDown_SelectionChanged(object sender, FooBar e)
{
   releaseHoldDropDown.ForeGround = new SolidColorBrush(Colors.White);
   DataSource ds = (DataSource)releaseHoldDropDown.SelectedItem;
   if (ds.DisplayField == "Release")
        releaseHoldDropDown.Background = new SolidColorBrush(Colors.Green);
   else if(ds.DisplayField == "Hold")
        releaseHoldDropDown.Background = new SolidColorBrush(Colors.Red);
}

伙计,如果你能给我ExpressionLight.xaml,我可以帮你。那么只有我能帮忙

您是否尝试更改模板控件的必要颜色,如下所示?

<ComboBox x:Name="comboBox"
            ItemsSource="{Binding Items}"
            Margin="0,0,0,10"
            Background="White">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Grid Background="White">
                <TextBlock Foreground="Black" Text="{Binding Name}"/>
            </Grid>    
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>