我查看了本网站提供的所有答案,以便找到问题的答案,但我找不到合适的解决方案。
我有一个使用ItemsSource属性绑定到Class的组合框。
班级定义如下:
public class DataSource
{
public string DisplayField { get; set; }
public string ValueField { get; set; }
}
ComboBox必须使用DisplayMemberPath =“DisplayField”和SelectedValuePath =“ValueField”来显示数据......这是在窗口加载后的代码中完成的。
ComboBox定义如下:
<ComboBox Grid.Row="0" Grid.Column="1" Margin="5 5 5 0" Name="releaseHoldDropDown" Width="100"/>
如果下拉列表的值更改为“Release”,我需要一种方法将背景更改为绿色,将前景更改为白色。
如果下拉列表的值变为“Hold”,我还需要将背景更改为Red,将Foreground更改为White。
仅供参考:我使用ExpressionLight.xaml主题来整理应用程序的样式。
作为旁注,我还想要一种方法将所有我的Comboboxes的背景从灰色更改为白色,以使它们更具可读性。所以我需要修改ExpressionLight.xaml,但我不知道要编辑哪个部分来进行这些更改。
任何帮助都会受到赞赏。
谢谢
答案 0 :(得分:0)
由于您只想更改前景色而不是背景色(保持白色),所以在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,我可以帮助你。然后我才能帮忙
答案 1 :(得分:0)
为什么不使用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>
这可能是你的开始
答案 2 :(得分:0)
您是否尝试更改模板控件的必要颜色,如下所示?
<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>