WPFのアクセスキー制御

アクセスキーというのは、いわゆる、ALT+なんとかキーで、メニューに飛ぶアレです。

Windows Form で作ったメニューの場合は、「ファイル(&F)」な感じで、「&」を付けるのですが、

WPFの場合には、「ファイル(_F)」な感じで「_」(アンダーバー)を付けます。

WPFでのメニューアクセスキー
http://blogs.wankuma.com/yo/archive/2008/02/05/121155.aspx

アンダーバーに変わっているのは、多分 XAML でアンパサンド(&)を使うと、記述的に困難だからでしょうね。

なので、メニューにアンダーバーが使えない、という弊害があるわけですが。

# __ のようにアンダーバーを重ねるといける?

さて、問題は、メニューが無いときです。

20100728_03.jpg

ツイート専用ツールの場合、メニューを付けるのは嫌だし、ショートカットの記号(ツイート(S))を付けるのも嫌だし。

というわけで、

AccessKeyManager クラス (System.Windows.Input)
http://msdn.microsoft.com/ja-jp/library/system.windows.input.accesskeymanager.aspx

を使います。

XAMLのほうに、

<Grid AccessKeyManager.AccessKeyPressed=”Grid_AccessKeyPressed”

として、アクセスキーのハンドラを設定しておいて、次な感じで、Key で振り分けます。

 

/// <summary>
/// アクセスキー制御
/// </summary>
/// <param name=”sender”></param>
/// <param name=”e”></param>
private void textBox1_AccessKeyPressed(object sender, AccessKeyPressedEventArgs e)
{
 switch ( e.Key ) {
  case “S” :
   if ( textBox1.Text.Length != 0 ) {
    button1_Click( sender, null );
   }
   break;
  case “B”:
   button2_Click( sender, null );
   break;
  case “D”:
   buttonDel_Click(sender, null );
   break;
 }
}

Key 自体は、「ALT+キー」で押される、アルファベットの大文字(なぜか文字列)で渡されるので、それを指定します。

上記の例では、

  • ALT+S で、ツイート
  • ALT+B で、短縮URL
  • ALT+D で、ひとつ削除

って具合です。

 

 

カテゴリー: 開発 パーマリンク