【问题标题】:Change ComboBox Background and Foreground After Item Selection选择项目后更改组合框背景和前景
【发布时间】:2012-05-09 01:07:51
【问题描述】:

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

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

类定义如下:

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”,我需要一种方法将背景更改为绿色,将前景更改为白色。

如果下拉菜单的值更改为“保持”,我还需要将背景更改为红色,将前景更改为白色。

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

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

我们将不胜感激。

谢谢

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    为什么不使用 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>
    

    这可能是你的开始

    【讨论】:

    • 我尝试了您的解决方案,但没有成功。 ComboBox 的背景没有改变。它周围出现了一个白色边框,但组合框背景本身没有改变。
    • 我用白色背景值尝试了你的解决方案,它奏效了。我想知道我需要做些什么才能使其成为表达式光主题中的通用样式?
    【解决方案2】:

    由于您只想更改前景色而不是背景色(保持白色),因此在 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,我可以帮助你。那只有我能帮忙

    【讨论】:

    • 我正在尝试在 xaml 中执行此操作。我需要控件的背景为白色或透明以开始
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 2016-07-09
      • 1970-01-01
      相关资源
      最近更新 更多