首先,我是WPF和Xaml的新手,所以我只是希望你明白我在問什麼。文本顏色取決於值
我得到了這種情況:有一個動物列表框。每隻動物都有重量屬性。我試圖達到的目標是每當動物體重超過300公斤時,體重應顯示爲紅色。
首先,我是WPF和Xaml的新手,所以我只是希望你明白我在問什麼。文本顏色取決於值
我得到了這種情況:有一個動物列表框。每隻動物都有重量屬性。我試圖達到的目標是每當動物體重超過300公斤時,體重應顯示爲紅色。
你可以使用自定義的轉換器來實現這一點。如果您的項目看起來像這樣:
public class Animal
{
public int Weight { get; set; }
public string Name { get; set; }
}
和ItemTemplate裏那樣:
<DataTemplate x:Key="AnimalTemplate">
<TextBlock Text="{Binding Name}" Foreground="{Binding Weight, Converter={StaticResource AnimalColorSelector}}"/>
</DataTemplate>
你的轉換器會像下面的一個:
public class AnimalColorSelector : IValueConverter
{
private readonly Color _overweightColor = Colors.Red;
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is int)
{
return (int) value > 300 ? new SolidColorBrush(_overweightColor) : Binding.DoNothing;
}
return Binding.DoNothing;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
這種方法具有以下優點:
Binding.DoNothing
繼承它。您可以爲動物創建一個ViewModel,其中包含必要的顏色設置邏輯。就像這樣:
public class VMAnimal : INotifyPropertyChanged
{
private int _weight;
public int Weight
{
get { return _weight; }
set
{
_weight = value;
RaisePropertyChanged("Weight");
RaisePropertyChanged("Color");
}
}
public Brush Foreground
{
get
{
if (Weight > 300)
return new SolidColorBrush(Color.Red);
return new SolidColorBrush(Color.Black);
}
}
}
而且,像這樣結合使用:
<TextBlock Text="{Binding Weight}" Foreground="{Binding Foreground}" />
或使用轉換器 – Phil 2012-04-01 19:08:06
非常感謝。有用! – BojanSM 2012-04-01 19:46:35