1 つのプロパティに基づいて外観を変更する wpf のカスタム コントロールがあります。
...
<Grid>
<Rectangle Fill="[Something]" />
</Grid>
コードには、プロパティ AlarmLevel があります。AlarmLevel が 5 より大きい場合は、塗りつぶしを赤、それ以外の場合は青にします。これどうやってするの。(fill プロパティを公開したくない)
TNX
1 つのプロパティに基づいて外観を変更する wpf のカスタム コントロールがあります。
...
<Grid>
<Rectangle Fill="[Something]" />
</Grid>
コードには、プロパティ AlarmLevel があります。AlarmLevel が 5 より大きい場合は、塗りつぶしを赤、それ以外の場合は青にします。これどうやってするの。(fill プロパティを公開したくない)
TNX
フィル値を不等式に基づいているため、いくつかの方法でこれを行うことができます。
推奨される方法は、おそらくバインディングでコンバーターを使用してブール値にすることです。次に、データ トリガーを使用して、次のように、値が true か false かに基づいて塗りつぶし値を設定します。
<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; }
}
次に、データ トリガーを AlarmLevel ではなく IsAlarming にバインドします。 ただし、これは純粋な MVVM ではないため、お勧めしません。