选择项目后更改组合框背景和前景
本文关键字:背景 组合 项目 选择 | 更新日期: 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>