Trigger をコードだけで指定してみる

Template と Style をコードで書いたから、今度は Trigger。

// フォーカスがある TextBox の背景色を変更するトリガー
Trigger trigger = new Trigger();
trigger.Property = TextBox.IsFocusedProperty;
trigger.Value = true;
trigger.Setters.Add(new Setter(
    TextBox.BackgroundProperty,
    new SolidColorBrush(Colors.Yellow)));

// トリガーはスタイルで指定する
Style style = new Style(typeof(TextBox));
style.Triggers.Add(trigger);

// Window のリソースにスタイルを追加
// すべての TextBox に適用する
Resources.Add(typeof(TextBox), style);

これだけ。コードはすごく簡単ですね。でも今回は結構苦戦しました(;^_^A

最初は

// TextBox の Triggers に直接ぶっこむ!
_textBox.Triggers.Add(trigger);

と書いていたんですが、これだと実行時に XamlParseException が発生します。スタイルを利用することに気付くまで1時間程かかりました。

なお TextBox には Style プロパティがあり、

// Trigger を追加したスタイルをセットする
_textBox.Style = style;

と書いても動作します。