Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 笔刷MVVM绑定不提供命名颜色_Wpf_Mvvm_Datatrigger_Brushes - Fatal编程技术网

Wpf 笔刷MVVM绑定不提供命名颜色

Wpf 笔刷MVVM绑定不提供命名颜色,wpf,mvvm,datatrigger,brushes,Wpf,Mvvm,Datatrigger,Brushes,我有一个用于边框背景的MVVM绑定,在该绑定中,我以字符串格式从文件中读取颜色名称,并使用以下代码将其转换为笔刷: Brush b1 = new SolidColorBrush((Color)ColorConverter.ConvertFromString("Red"); myItem.Background = b1; 背景是ViewModel中定义为以下内容的属性: public Brush Background { get { return _background; } s

我有一个用于边框背景的MVVM绑定,在该绑定中,我以字符串格式从文件中读取颜色名称,并使用以下代码将其转换为笔刷:

Brush b1 = new SolidColorBrush((Color)ColorConverter.ConvertFromString("Red");
myItem.Background = b1;
背景是ViewModel中定义为以下内容的属性:

public Brush Background
{
    get { return _background; }
    set
    {
        this._background = value;
        RaisePropertyChanged("Background");
    }
}
它在XAML中的访问方式如下:

<Border Background="{Binding Background}">
    <Border.Style>
        <Style TargetType="{x:Type Border}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Background}" Value="Red">
                    <Setter Property="Height" Value="40"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Border.Style>
</Border>

边界颜色正确-没有问题

问题是DataTrigger从未被触发,因为当我在set方法中看到此._background的值时,它是“#FFFF0000”,并且不等于brush.Red(我尝试将该值转换为SolidColorBrush,然后与brush.Red进行比较,但不等于)

我做错了什么?如何确保从文件中读取的颜色名称正确转换为画笔。*以便DataTrigger正常工作

谢谢


RDV

是,
画笔。红色
是一种
SolidColorBrush
。不是颜色,是刷子。混淆源于将XAML中的字符串“Red”隐式转换为笔刷对象。但是一个新的
SolidColorBrush
实例的
Color
也等于
#FFFF0000
将是
SolidColorBrush
的另一个实例,并且它们不会彼此“相等”

但你不在乎它是哪一个笔刷实例;你关心颜色。所以比较一下颜色<代码>(Brushes.Red.Color==Colors.Red)==true<代码>颜色是一种值类型,而不是参考类型,因此两个等效值将被视为相等

<DataTrigger 
    Binding="{Binding Background.Color, RelativeSource={RelativeSource Self}}" 
    Value="Red">
<DataTrigger 
    Binding="{Binding Path=Background.Color, RelativeSource={RelativeSource Self}}" 
    Value="Red">