首先,我是WPF和Xaml的新手,所以我希望你明白我在问什么。
我遇到了这种情况:有一个动物列表框。每个动物都有重量属性。我想要达到的目标是,当动物体重超过300公斤时,体重应显示为红色。
答案 0 :(得分:2)
您可以使用自定义转换器来实现这一目标。如果您的商品看起来像这样:
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
继承它。答案 1 :(得分:0)
您可以为动物创建一个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}" />