【问题标题】:WPF, setting background color with triggerWPF,使用触发器设置背景颜色
【发布时间】:2019-01-09 08:50:27
【问题描述】:

我有一个呈现文本框的自定义控件。我还有一种样式,可以根据一些条件设置背景颜色,如下所示:

<Style x:Key="ArtParamStyle" TargetType="av:DC_Base">
    <Setter Property="Background" Value="{StaticResource EditableAreaBrush}" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=Info.Upd.IsAutoCalc}" Value="True">
            <Setter Property="Background" Value="Red" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=Forced}" Value="True">
            <Setter Property="Background" Value="LightGreen" />
        </DataTrigger>
    </Style.Triggers>
</Style>

最初,当我的文本框的值是自动计算的,背景是正确的红色。如果我还将 Forced 设置为 true(通过勾选 chebckbox)我有一个奇怪的结果,文本框的边框是浅绿色但背景不是。

它似乎是一种奇怪的颜色,红色和浅绿色的组合。作为测试,如果我将“IsAutoCalc”颜色设置为透明,则触发器可以正常工作。我该如何解决这个问题?

【问题讨论】:

  • 什么是av:DC_Base
  • 呈现文本框的自定义控件
  • 你能展示一下吗?
  • 你的自定义控件的模板是如何定义的?请张贴。

标签: c# wpf xaml


【解决方案1】:

您的代码似乎是正确的。但我给你我的样本:

XAML:

<Window.Resources>
    <Style x:Key="ArtParamStyle" TargetType="TextBox">
        <Setter Property="Background" Value="Yellow" />
        <Style.Triggers>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding Bool1}" Value="True"/>
                    <Condition Binding="{Binding Bool2}" Value="False"/>
                </MultiDataTrigger.Conditions>
                <Setter Property="Background" Value="Red" />
                <Setter Property="BorderBrush" Value="Red" />
            </MultiDataTrigger>
            <DataTrigger Binding="{Binding Bool2}" Value="True">
                <Setter Property="Background" Value="LightGreen" />
                <Setter Property="BorderBrush" Value="LightGreen" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<Grid>
    <StackPanel>
        <TextBox Style="{StaticResource ArtParamStyle}" Height="50" Margin="4"/>
        <CheckBox IsChecked="{Binding Bool1}"/>
        <CheckBox IsChecked="{Binding Bool2}"/>
    </StackPanel>
</Grid>

在这种情况下,当 Bool2(您的强制)未选中时,我使用 Multidatatrigger 设置红色背景。

MainWindow.cs:

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private void RaisePropertyChaged(string property)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }

    private bool bool1;

    public bool Bool1
    {
        get { return bool1; }
        set { bool1 = value; RaisePropertyChaged("Bool1"); }
    }

    private bool bool2;

    public bool Bool2
    {
        get { return bool2; }
        set { bool2 = value; RaisePropertyChaged("Bool2"); }
    }

    public MainWindow()
    {
        InitializeComponent();

        this.DataContext = this;
    }
}

可能您的问题与您的自定义控件有关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 2014-07-21
    • 2015-02-21
    • 2023-03-25
    相关资源
    最近更新 更多