ページ

2010年7月30日金曜日

[Silverlight] ビヘイビアーの開発 その1

ビヘイビアーを開発する際に必要となる基本的なところをまとめておきます。

■ ドキュメント
とりあえず、以下のヘルプファイルが入っているのは見つけました。
これらのファイルがいつ入ったのかまでは調べてませんが、名前的に考えて Expression Blend を入れたときだと思います。

※以下、”%PROGRAMFILES%” と表記していますが、64bit OS の場合は “%PROGRAMFILES(x86)%” になります。

Blend 3 (英語版) %PROGRAMFILES%\Microsoft SDKs\Expression\Blend 3\Help\en\BlendSDK.chm
Blend 4 (日本語版) %PROGRAMFILES%\Microsoft SDKs\Expression\Blend\.NETFramework\v4.0\Help\ja\.NETFramework40BlendSDK.chm

また、Blend SDK は Microsoft のダウンロードサイトからダウンロードできますので、きっとそれにも入ってるんだと思います。(確認はしてませんが)

もっとも、このヘルプファイルにはちょっと不満が。。。
Blend 3 のやつはクラスのリファレンスが載ってるだけで解説なんかは全然ありません。
Blend 4 の方はちょっと解説なんかも増えてますが、「ビヘイビアーの追加の仕方」 みたいな Blend の使い方について数ページの解説があるだけで、ビヘイビアーの開発方法についてはほとんど何も説明がありません。「カスタムのトリガーとアクションの作成」 というページと 「カスタム ビヘイビアーの作成」 というページがそれぞれ 1ページづつあるだけみたいです。
英語のヘルプと日本語のヘルプとでは翻訳してあるだけで基本的に内容は同じみたいですし。。。
うーん、どっかにまともな開発用ドキュメントってあるんでしょうか?

■ 参照設定
Visual Studio で作った Silverlight プロジェクトの場合、ビヘイビアーの開発に必要となるアセンブリを手動で参照設定する必要があります。
Blend で作ったプロジェクトの場合は最初からこれらの参照設定が含まれています。どうやら以下のファイルが参照設定されているようです。

Blend 3 (英語版) %PROGRAMFILES%\Microsoft SDKs\Expression\Blend 3\Interactivity\Libraries\Silverlight フォルダの下
  • System.Windows.Interactivity.dll
  • Microsoft.Expression.Interactions.dll
Blend 4 (日本語版) %PROGRAMFILES%\Microsoft SDKs\Expression\Blend\.NETFramework\v4.0\Libraries フォルダの下
  • System.Windows.Interactivity.dll
  • Microsoft.Expression.Interactions.dll
  • Microsoft.Expression.Drawing.dll

ビヘイビアーの開発という意味では本当に必要なのは System.Windows.Interactivity.dll だけみたいです。Behavior<T> や TriggerAction<T> といったビヘイビアーの基本クラスとなるクラスなどがこれに含まれています。
Microsoft.Expression.Interactions.dll には標準で付いているビヘイビアー (ChangePropertyAction や PlaySoundAction といったもの) が入っているようです。
Blend 4 で増えた Microsoft.Expression.Drawing.dll には星とかのシェープが入っています。

■ ビヘイビアーの基本クラス
ビヘイビアーを開発する場合、Behavior<T>、TriggerAction<T>、TargetedTriggerAction<T> のいずれかを継承する必要があります。

■ Behavior<T>
もっともシンプルなビヘイビアーの基本クラスです。
サンプルコードは以下のようになります。

public class BehaviorSampleBehavior : Behavior<FrameworkElement>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        this.AssociatedObject.MouseLeftButtonDown += AssociatedObject_MouseLeftButtonDown;
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();
        this.AssociatedObject.MouseLeftButtonDown -= AssociatedObject_MouseLeftButtonDown;
    }

    void AssociatedObject_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        MessageBox.Show("left button down");
    }
}

AssociatedObject プロパティにビヘイビアーが接続しているオブジェクトが格納されています。
ですので、アタッチのときにイベントハンドラを登録し、デタッチのときに削除する、というようにしてやると好きなイベントに反応することができます。

■ ジェネリック引数 T について
Behavior<T> の T ですが、これは 「どのオブジェクトに接続することができるのか」 を示していると考えるとわかりやすいです。
T を FrameworkElement か UIElement にしておけば 「何にでも接続できるビヘイビアー」 ということになります。(XAML に出てくる普通のオブジェクトはみんな FrameworkElement から派生したオブジェクトだから。Resource とかは違うかもですが、そういう特殊なやつはここでは横に置いておきます)
T を Button にすれば Button (と Button から派生しているもの) に接続できるビヘイビアーということになります。

Blend はきちんと T の型を見ています。
Blend でビヘイビアーをドロップしようとすると、マウスの下がドロップ不可のときは進入禁止マークになりますが、T が Button になっていると Button (と Button から派生しているもの) の上にマウスがある時だけドロップ可能になって、それ以外のときは進入禁止マークになります。

そして、もちろん AssociatedObject プロパティの型は T です。

[Silverlight] ビヘイビアーの開発 その2」 に続きます。

0 件のコメント:

コメントを投稿