アクセスキーというのは、いわゆる、ALT+なんとかキーで、メニューに飛ぶアレです。
Windows Form で作ったメニューの場合は、「ファイル(&F)」な感じで、「&」を付けるのですが、
WPFの場合には、「ファイル(_F)」な感じで「_」(アンダーバー)を付けます。
WPFでのメニューアクセスキー
http://blogs.wankuma.com/yo/archive/2008/02/05/121155.aspx
アンダーバーに変わっているのは、多分 XAML でアンパサンド(&)を使うと、記述的に困難だからでしょうね。
なので、メニューにアンダーバーが使えない、という弊害があるわけですが。
# __ のようにアンダーバーを重ねるといける?
さて、問題は、メニューが無いときです。
ツイート専用ツールの場合、メニューを付けるのは嫌だし、ショートカットの記号(ツイート(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 で、ひとつ削除
って具合です。