Wpf 笔刷MVVM绑定不提供命名颜色
我有一个用于边框背景的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
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">