がりらぼ

WindowsRuntimeの応援ブログ

真・WinRTでショートカットキーを有効化するライブラリを作った

以前、KeyBindManagerとかいうクラスでショートカットキーを管理し3つのキーと2つのキーの組み合わせを識別できないダメなライブラリをリリースしていましたが

今回はビヘイビアとすることで使いやすくなりました。また、3つのキーと2つのキー修飾を識別でき、MVVMパターンの場合はCommandとバインディングできるようにしました。

インストール

ライブラリはNugetにあげています。 Nugetパッケージマネージャから「ShortcutKeyBehavior」と検索し、インストールしましょう。

f:id:garicchi:20141221200150p:plain

f:id:garicchi:20141221200157p:plain

ここまでできたらプロジェクトをBlendで開いてみましょう。

たぶんビヘイビアのところにShortcutKeyBehaviorが追加されているはずです。

f:id:garicchi:20141221200339p:plain

使い方

Blendでビヘイビアを表示できたらショートカットキーを適用したいFrameworkElementにドラッグアンドドロップしましょう。

f:id:garicchi:20141221200436p:plain

プロパティウインドウにKey、ModifierKey1、ModifierKey2のプロパティが表示されています。

これはVirtualKey型なのでここでショートカットキーを指定します。

1つのキーを適用する場合はKeyだけ、

2つのキーを適用する場合はKeyとModifierKey1を、

3つのキーを適用する場合はKeyとModifierKey1とModifierKey2を

VirtualKeyを指定します。

f:id:garicchi:20141221200632p:plain

XAMLエディタからも編集できます。

あとはx:Name属性で名前を付けて、OnShortcutDownイベントハンドラを受けるメソッドを作ると通常のボタンのイベントハンドラと同じようにコードビハインドで受けることができます。

f:id:garicchi:20141221200827p:plain

f:id:garicchi:20141221200835p:plain

C#だけで完結させたい場合

XAMLつかいたくないよ!って人もしくはXAMLエディタで謎エラーが出る人はShortcutKeyBehaviorもC#のクラスなのでC#から叩くことも可能です。

こんな感じでnewしてFrameworkエレメントにアタッチすることでOKです。 Pageのコンストラクタで呼ぶと便利

public MainPage()
{
    this.InitializeComponent();
    this.DataContext = new MainViewModel();

    ShortcutKeyBehavior behavior = new ShortcutKeyBehavior();
    behavior.Key = VirtualKey.B;
    behavior.OnShortcutDown += (s, e) =>
    {
        Debug.WriteLine("B");
    };

    behavior.Attach(this);
}

MVVMパターンの場合

ShortcutKeyBehaviorにはCommandプロパティもあります。

イベントハンドラだけでなく、ViewModelのRelayCommandとバインドすることもできます。

KeyプロパティもDependencyプロパティなのでバインド可能です。

f:id:garicchi:20141221201227p:plain

こんな感じでViewModelと連携できるis便利

f:id:garicchi:20141221201323p:plain

ショートカットキーを保存したりユーザーが任意に変更したりしたい

KeyとModifierKey1とModifierKey2プロパティはDependencyプロパティなのでModelとバインドすることができます。

Modelとバインドして、Modelをシリアル化したらテキストとしてショートカットを保存可能だしユーザーに任意に変更してもらえます。

2つ以上ショートカットをつけたい

ビヘイビアを2つつけませう

ソースコード

GitHubにあげてます。

garicchi/ShortcutKeyBehavior · GitHub