かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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を参照に追加しなくてもいいように出来たらいいな…(優先度:低)