[英]Brush MVVM Binding does not give named color
我有一個用於邊框背景的 MVVM 綁定,其中我從字符串格式的文件中讀取顏色名稱,並使用代碼將它們轉換為 Brush:
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 方法中看到 this._background 的值時,它是“#FFFF0000”並且它不等於 Brushes.Red(我嘗試將值轉換為 SolidColorBrush,然后與 Brushes.Red 進行比較,但不相等)。
我做錯了什么? 我該怎么做才能確保我從文件中讀取的顏色名稱正確轉換為 Brushes.*,以便我的 DataTrigger 正常工作。
謝謝,
RDV
是的, Brushes.Red
是SolidColorBrush
。 不是顏色,是畫筆。 混淆源於將 XAML 中的字符串“Red”隱式轉換為 Brush 對象。 但是一個Color
也等於#FFFF0000
的新SolidColorBrush
實例將是SolidColorBrush
的不同實例,它們不會彼此“相等”。
但是你並不關心它是哪個筆刷實例; 你關心顏色。 所以比較一下顏色。 (Brushes.Red.Color == Colors.Red) == true
。 Color
是值類型,而不是引用類型,因此兩個等效值將被視為相等。
<DataTrigger
Binding="{Binding Background.Color, RelativeSource={RelativeSource Self}}"
Value="Red">
請注意, Background
不是DataContext
的屬性。 這是第二件不適用於您的代碼的事情。 您需要明確告訴Binding
不是查看DataContext
,而是查看控件本身,以查找Path
引用的屬性。 RelativeSource={RelativeSource Self}
這樣做的。 "Background.Color"
是Binding
的Path
參數。 Path
是默認值,因此您不必顯式命名它。 但你可以:
<DataTrigger
Binding="{Binding Path=Background.Color, RelativeSource={RelativeSource Self}}"
Value="Red">
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.