かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Visual StudioのデザイナでBehaviorをサポートしてみた

プレゼンテーションロジックをカプセル化したり巷で流行のMVVMとかでも大活躍のBehaviorですが、当然のように使われてたりしますが、実はVisual Studioの場合はデザイナのサポートが無いため手でXAMLをしこしこ書かないといけません。
個人的にはBlendを使える環境にあるのですが、皆が皆Blendを使える環境にあるとは思えません。

マイクロソフトが正式に対応してくれれば、それにこしたことはないのですが、それまでの間に合わせとしてVisual StudioのデザイナでBehaviorを使えるように試行錯誤してみました。

注意事項

  • 試行錯誤含めて3時間程度で作ったのでバグがある可能性があります
  • 使う場合は自己責任でお願いします
  • .NET Framework 4のWPFでしか試していません
  • まだBehaviorにしか対応していません
    • TriggerやActionは今後追加していこうと考えています
  • Window直下にBehaviorを設定できません
    • LayoutRootに設定することでごまかしてください・・・
    • 1つでもWindowにBehaviorが追加された状態にXAMLで編集すれば、2つ目からは追加できます

上記の注意事項・制限事項があることを認識して守れる方は以下からダウンロードして使ってみて感想をください。

使い方

  • 解凍してできたフォルダを任意の場所に起きます。
  • Expression Blend 4のSDKが入ってない人は入れてください
  • Visual Studio 2010でWPFアプリケーションのプロジェクトを作成してください
  • 解凍したフォルダ内にあるOkazuki.BehaviorSupport.dllを参照に追加してください
    • Designフォルダとかも必要なので動かさないでください
  • 以下のアセンブリを参照に追加してください
    • System.Windows.Interactivity
    • Microsoft.Expression.Interactions

ここまでの手順でソリューションエクスプローラは以下のようになっているはずです。

  • Visual Studioのデザイナで適当なコントロールを選択した状態で右クリックをして[Add Behavior...]を選択してください。以下のようなダイアログが出てきます。(参照に追加されてる中からBehaviorを探してきてます)

  • OKをクリックすると、コントロールに選択したBehaviorが追加されます。
<Window x:Class="BehaviorSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions">
    <Grid>
        <!-- これが追加された! -->
        <i:Interaction.Behaviors>
            <ei:FluidMoveBehavior />
        </i:Interaction.Behaviors>
    </Grid>
</Window>
  • Behavior自体のプロパティはタグを選択した状態で、Visual Studioのプロパティエディタでしてください。

今後の予定

  • TriggerやActionに対応(優先度:高)
  • Okazuki.BehaviorSupport.dllを参照に追加しなくてもいいように出来たらいいな…(優先度:低)