我在WPF自定義控件基於一個屬性,它改變了他的樣子:WPF自定義控件「風格模式」
...
<Grid>
<Rectangle Fill="[Something]" />
</Grid>
在代碼中,我的財產警報等級,當警報等級是大於5我想填充爲紅色,否則爲藍色。 我該怎麼做。 (我不希望被曝光的填充屬性)
TNX
我在WPF自定義控件基於一個屬性,它改變了他的樣子:WPF自定義控件「風格模式」
...
<Grid>
<Rectangle Fill="[Something]" />
</Grid>
在代碼中,我的財產警報等級,當警報等級是大於5我想填充爲紅色,否則爲藍色。 我該怎麼做。 (我不希望被曝光的填充屬性)
TNX
既然你在一個不平等的基礎填充值,你可以這樣做一對夫婦的方式。
推薦的方法可能是使用一個轉換器上的結合,使之成爲一個布爾值。然後使用數據觸發設置基礎上的值是否是真還是假,像這樣的填充值:
<Rectangle>
<Rectangle.Style>
<Style TargetType="Rectangle">
<Style.Triggers>
<DataTrigger Binding="{Binding AlarmLevel, Converter={StaticResource AlarmLevelConverter}}" Value="True">
<Setter Property="Fill">
<Setter.Value>
<SolidColorBrush Color="Red" />
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding AlarmLevel, Converter={StaticResource AlarmLevelConverter}}" Value="False">
<Setter Property="Fill">
<Setter.Value>
<SolidColorBrush Color="Black" />
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
</Rectangle>
你的轉換可能看起來像(也許更多的異常處理):
public class AlarmLevelConverter: IValueConverter {
public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) {
return ((int)(value) > 5);
}
public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) {
throw new NotSupportedException();
}
}
不要忘記你需要一個參考轉換器類添加爲一個資源上的用戶控件:
如果你想放棄的轉換器的方法,你也可以創建你的數據上下文一個「助手」布爾屬性稱爲像「IsAlarming」。它看起來像這樣:
public bool IsAlarming {
get { return AlarmLevel > 5; }
}
然後,您會將您的數據觸發器綁定到IsAlarming而不是AlarmLevel。 這是不推薦,但因爲它不是純MVVM。
這不是真的,後者'不是推薦的,它不是純粹的MVVM'。這正是視圖模型的目的 - 包含可以綁定到的屬性。在純MVVM中,你永遠不需要轉換器,因爲所有的東西都已經存在於虛擬機中。從某種意義上說,視圖模型是這種模式下的轉換器,因爲它們將模型數據轉換爲表示數據。 *這是推薦的做事方式。 – pbalaga
您可以實現它每次更改檢查值,並從那裏走時INotifyPropertyChanged接口。 http://msdn.microsoft.com/en-us/library/ms743695.aspx – Botonomous
您將需要一個ValueConverter(的IValueConverter)來做到這一點。如果您在本網站上搜索IValueConverter,會有很多結果來顯示應該如何實施。 – Stewbob