新しい WPF ビューとダイアログ ボックスで拡張している従来の MFC アプリケーションがあります。MFC メイン ウィンドウから呼び出される WPF ダイアログ ボックスに F1 ヘルプを実装しようとしています。
最初にKeyBinding
、F1 の WPF ダイアログに を追加し、実行するコマンドを起動させましたHtmlHelp
。このようなもの:
<Window.Resources>
<command:CommandReference x:Key="ShowF1Help" Command="{Binding ShowHelpCommand}"/>
</Window.Resources>
<Window.InputBindings>
<KeyBinding x:Name="ShowHelp" Gesture="F1" Command="{StaticResource ShowF1Help}"/>
</Window.InputBindings>
これによりヘルプが表示されましたが、残念ながらMFC ウィンドウでもキーボード イベントが検出されました。WPF ダイアログがその上にモーダルで表示されていたとしても、MFC ウィンドウは F1 を受け取ったままだったのでHtmlHelp
、2 回目に起動して独自のトピックを表示していました。
XAML/KeyBinding
イベントを要素内で処理済みとしてマークする方法を探しましたが、うまくいきませんでした。KeyDown
そこで、総当たり攻撃を試み、それをコード ビハインドのハンドラーに置き換えて、次のようにイベントを処理済みとしてマークしました。
private void WindowKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.F1)
{
MyDialogVM.ShowContextSensitiveHelp();
e.Handled = true;
}
}
これはうまくいきませんでした。イベントは依然として MFC ウィンドウによって処理されます。私も試しPreviewKeyDown
ました-同じ結果。
明らかなことを見落としているような気がしますが、WPF イベントを処理済みとしてマークすることは WPF コードにのみ影響するように見えます.MFC メッセージ ポンプは、マネージ コードが特定のキーボード イベントを認識または処理したことを認識していません。
WPF ダイアログ ボックスで処理されるキーボード イベントが、ダイアログを呼び出した MFC アプリケーションにも表示されないようにする方法はありますか?
前もって感謝します。