5

メインウィンドウに次の KeyBinding を持つ WPF アプリケーションがあります。

<KeyBinding Command="Commands:EditCommands.Undo" Gesture="CTRL+Z" />
<KeyBinding Command="Commands:EditCommands.Redo" Gesture="CTRL+Y" />

これにより、コマンドはショートカットにうまく反応します。ただし、WinForms テキスト ボックスまたはリッチ テキスト ボックスを埋め込んだすべての場所で、これらのショートカットを使用できなくなりました。上記のバインドを削除すると、WinForms のショートカットが正常に機能します。

WinForms と WPF の両方でこれらのショートカットをサポートするにはどうすればよいですか? この問題は、同じキーバインドを持つ他の多くのコマンドに影響を与える可能性があるため、一般的な方法をお勧めします。

4

1 に答える 1

2

組み込みコマンドを使用していない理由がわかりません。

  • ApplicationCommands.Undo、 と
  • ApplicationCommands.Redo

これらの組み込みコマンドを使用することには、いくつかの利点があります。

  1. それらのキー バインディングは、ロケールに基づいて自動的に設定されます ( Ctrl+ZCtrl+Yは、すべてのロケールでデフォルトの取り消し/やり直しキーではない場合があります)。
  2. 彼らは名誉を与えられTextBoxRichTextBox
  3. 問題なく WPF <-> WinForms 境界を越えます
  4. アクセシビリティ インターフェイスで動作します
  5. それらは、それらを持つキーボードの組み込みの「元に戻す」キーによって呼び出されます

したがって、可能であれば、コード内の適切な場所にApplicationCommands登録するだけで組み込みを使用する必要があります。CommandBindings

詳しくは

WPF と WinForms の両方で組み込みの元に戻す/やり直し機能を使用すると、機能します。たとえば、次の例では、RichTextBoxesWinForms ベースと WPF ベースの 2 つの が作成され、両方とも完全な元に戻す/やり直し機能を備えています。

<UniformGrid Columns="2"
  xmlns:winforms=
    "clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms">

  <WindowsFormsHost >
    <winforms:RichTextBox />
  </WindowsFormsHost>

  <RichTextBox />

</UniformGrid>

これは機能し、あなたのものは機能しないため、何が違うのかを理解してください. コメントで、カスタム WPF を削除しようとしたと述べましたInputBindings。WinForms側でも同じことをしましたか? そうでない場合は試してみてください。それができない場合は、質問を編集してそのコードも表示してください。

ApplicationCommands独自の に再マップできることに注意しRoutedCommandsCommandBindingくださいRoutedCommand

于 2010-06-15T07:31:40.070 に答える