まず、WPFとXamlの新機能ですので、私が尋ねていることを理解していただければ幸いです。テキストの色は値に依存します
私はこの状況になっています:動物のリストボックスがあります。すべての動物には重量特性があります。私が達成しようとしているのは、動物の体重が300kgを超えると、体重が赤く表示されるはずです。
まず、WPFとXamlの新機能ですので、私が尋ねていることを理解していただければ幸いです。テキストの色は値に依存します
私はこの状況になっています:動物のリストボックスがあります。すべての動物には重量特性があります。私が達成しようとしているのは、動物の体重が300kgを超えると、体重が赤く表示されるはずです。
あなたはそれを達成するために、カスタムコンバータを使用することができます。そのような
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
ありがとうございました。できます! – BojanSM