FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Blend SDKを使ってビヘイビアを作る

 これまでにいくつかのBlend SDKの機能(アクション等)を紹介してきましたが、自分でアクションやビヘイビアを作成することもできます。
 今回はBlend SDKを使用して(インタラクション)ビヘイビアを作成します。
 ビヘイビアとは、コントロールに後付けで機能を追加するためのものです。
 例えば、Blend SDKにはMouseDragElementBehaviorというビヘイビアがありますが、このビヘイビアをアタッチしたコントロールはドラッグで移動することが可能になります。
 以下のサンプルコードではTextBox用のビヘイビアを作成します。
 機能は入力された値が偶数の場合はTextBoxの背景色を赤に変更します。
 偶数以外の値の場合は通常の背景色に戻します。
using System.Windows.Controls;
using System.Windows.Interactivity;
using System.Windows.Media;

namespace Blend5.Behaviors
{
    public class EvenRedBehavior : Behavior<TextBox>
    {
        private Brush RedBrush = new SolidColorBrush(Colors.Red);
        private Brush NormalBrush;

        protected override void OnAttached()
        {
            base.OnAttached();
            NormalBrush = AssociatedObject.Background;
            AssociatedObject.TextChanged += AssociatedObject_TextChanged;
        }

        protected override void OnDetaching()
        {
            AssociatedObject.TextChanged -= AssociatedObject_TextChanged;
            base.OnDetaching();
        }

        void AssociatedObject_TextChanged(object sender, TextChangedEventArgs e)
        {
            var text = AssociatedObject.Text;
            var value = 0;
            var isInt = int.TryParse(text, out value);
            if(isInt && value % 2 == 0)
            {
                AssociatedObject.Background = RedBrush;
            }
            else
            {
                AssociatedObject.Background = NormalBrush;
            }
        }
    }
}
 インタラクションビヘイビアを作成する場合はSystem.Windows.Interactivity.Behavior<T>を継承する必要があります。
 Tには対象となるコントロール(要素)の型を指定します。
 このサンプルではTextBox用のビヘイビアを作成するので、TはTextBoxになります。
 次に、OnAttachedメソッドとOnDetachingメソッドをオーバーライドしてください。
 このメソッドは名前の通り、ビヘイビアがアタッチされたときとデタッチされたときの処理を行います。
 アタッチされたときにイベント等を利用してビヘイビアの機能を追加します。
 デタッチされたときはアタッチしたときに追加したイベントハンドラの解除等の後片付けを行います。
 ビヘイビアがアタッチされた要素はAssociatedObjectに格納されています。
 今回の場合は入力された数値をもとに処理を行いたいのでTextChangedイベントを利用します。
 Textが変更された際にTextをint型に変換し、2で割り切れるかをチェックしています。
 偶数の場合は背景色を赤に、それ以外の場合はOnAttachedで取得しておいた基本背景色に変更します。

 次に、このビヘイビアを使用してTextBoxに機能を追加してみます。
<Window x:Class="Blend5.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
        xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
        xmlns:l="http://schemas.livet-mvvm.net/2011/wpf"
        xmlns:v="clr-namespace:Blend5.Views"
        xmlns:vm="clr-namespace:Blend5.ViewModels"
        xmlns:b="clr-namespace:Blend5.Behaviors"
        Title="MainWindow" Height="350" Width="525">
    
    <StackPanel>
        <TextBox Text="" Width="80">
            <i:Interaction.Behaviors>
                <b:EvenRedBehavior/>
            </i:Interaction.Behaviors>
        </TextBox>
        <TextBox Text="" Width="80">
            <i:Interaction.Behaviors>
                <b:EvenRedBehavior/>
            </i:Interaction.Behaviors>
        </TextBox>
    </StackPanel>
</Window>
 TextBox以下にInteraction.Behaviorsを指定し、先ほど作成したEvenRedBehaviorをアタッチするだけです。
 これで偶数が入力された際に背景色が赤くなる機能が追加されました。
 このコードを実行し、値を入力すると以下の様になります。
Behavior.png
 こんな感じで割と簡単にビヘイビアを作成できます。
 ビヘイビアにコントロールやデータを渡したり、処理の結果を受け取りたい場合はビヘイビアにプロパティを作成してください。
 その際にデータバインディングを行いたいのであれば依存関係プロパティで実装してください。
 よく使う機能はビヘイビアやアクションにしておくと再利用できて便利です。
 
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

カレンダー
10 | 2018/11 | 12
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
全記事表示リンク

全ての記事を表示する

カテゴリ
タグリスト

月別アーカイブ
11  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09 
最新記事
リンク
最新コメント
検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。