<MenuItem x:Name="newProjectButton" Click="OnNewProjectButton_Click" Header="_New Project">
</MenuItem>
Alt+Nが押されるたびにOnNewProjectButton_Clickを呼び出したい。残念ながら、上記のコードは機能しません。これは、メニューが展開されている(つまりフォーカスがある)場合にのみハンドラーが呼び出されるためです。
ApplicationCommands.Newはすでにその機能を提供しているため、これに使用できます。デフォルトのWPFコマンドモデルはかなりクールです。デフォルトのコマンドモデルを使用しないことにした場合でも、その2番目のリンクは、必要な入力ジェスチャを接続する方法を示しているはずです。
編集:これがサンプル実装です...
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.New"
CanExecute="NewApplicationCommand_CanExecute"
Executed="NewApplicationCommand_Executed" />
</Window.CommandBindings>
<Grid>
<Menu>
<MenuItem Header="_File">
<MenuItem Command="ApplicationCommands.New" Header="_New Project" />
</MenuItem>
</Menu>
</Grid>
そして背後にあるコード...
private void NewApplicationCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
// Whatever logic you use to determine whether or not your
// command is enabled. I'm setting it to true for now so
// the command will always be enabled.
e.CanExecute = true;
}
private void NewApplicationCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
Console.WriteLine("New command executed");
}
メニュー項目にInputGestureTextを設定するのがわかります
<MenuItem Header="Paste"
ToolTip="Paste the selected text to text box"
InputGestureText="Ctrl+V" />
ただし、WinFormsとは異なり、「アプリケーションは、アクションを実行するためにユーザーの入力を処理する必要があります」。
したがって、WPFコマンドを使用することを検討してください。これは自動的に行われます。Windows PresentationFoundationUnleashedがこれをうまくカバーしていることがわかりました。