项目选择后更改ComboBox背景和前景

时间:2012-05-09 01:07:52

标签: c# wpf

我查看了本网站提供的所有答案,以便找到问题的答案,但我找不到合适的解决方案。

我有一个使用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,但我不知道要编辑哪个部分来进行这些更改。

任何帮助都会受到赞赏。

谢谢

3 个答案:

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