SilverlightのBindingは、与えられた値を加工して表示フォーマットを変更したり型を変更したりできるValueConverterという仕組みがあります。また、バインディングソースにコントロールのプロパティを指定できます。
これらの機能を利用してTextBoxに入力した値が負の数だった場合は、そのTextBoxのForegroundを赤にする方法を紹介します。
アジェンダ
- ValueConverterの定義する
- ValueConverterを使用する
- まとめ
ValueConverterの定義する
IValueConverterを継承したクラスを定義します。IValueConverterは二つのメソッドを持っています。
メソッド名 | 機能 |
---|---|
Convert | ソースの値をターゲットにセットする前に呼ばれる。数値をカンマ区切り表記に変更する、などの機能を実装する。 |
ConvertBack | ターゲットの値をソースにセットする前に呼ばれる。バインディングモードがTwoWayの時のみこのメソッドは呼ばれる。 |
今回は、BindingのModeをOneWayにしますので、IValuConveterのConvertBackメソッドの中身は空のままとします。
public class BrushConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { double number; if (double.TryParse(value as string, out number)) { if (number >= 0) { // 負の数だった場合、黒を返す return new SolidColorBrush(Colors.Black); } else { // 負の数だった場合、赤を返す return new SolidColorBrush(Colors.Red); } } else { return new SolidColorBrush(Colors.Black); } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { // BindingModeがOneWayを想定しているので未実装で問題ない。 throw new NotImplementedException(); } }
ValueConverterを使用する
XAMLに以下の内容を記述します。
xmlnsの定義
xmlns:my="clr-namespace:ValueConverterSample"
BrushConverterのインスタンスを定義
<UserControl.Resources> <my:BrushConverter x:Key="BrushConverter"/> </UserControl.Resources>
まとめ
バインディング機能を利用してTextBoxに入力した値が負の数だった場合は、そのTextBoxのForegroundを赤にする方法を紹介しました。