Ant*_*ien 5 wpf keyboard-shortcuts winforms-interop winforms
我有一个 WPF 应用程序,其主窗口上具有以下 KeyBinding:
<KeyBinding Command="Commands:EditCommands.Undo" Gesture="CTRL+Z" />
<KeyBinding Command="Commands:EditCommands.Redo" Gesture="CTRL+Y" />
Run Code Online (Sandbox Code Playgroud)
这使得命令可以很好地响应快捷方式。但是,在所有嵌入 WinForms 文本框或富文本框的地方,我都无法使用这些快捷方式。如果我删除上述绑定,WinForms 快捷方式可以正常工作。
如何在 WinForms 和 WPF 中支持这些快捷方式?我更喜欢通用方法,因为这个问题可能会影响具有相同键绑定的许多其他命令。
我很困惑为什么你不使用内置命令:
ApplicationCommands.Undo, 和ApplicationCommands.Redo使用这些内置命令有几个优点:
TextBox和RichTextBoxApplicationCommands因此,如果可能的话,您应该通过简单地CommandBindings在代码中的适当位置注册它们来使用内置函数。
更多信息
如果您在 WPF 和 WinForms 中使用内置的撤消/重做功能,它就可以正常工作。例如,以下创建两个RichTextBoxes,一个基于 WinForms,一个基于 WPF,并且两者都具有完整的撤消/重做功能:
<UniformGrid Columns="2"
xmlns:winforms=
"clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms">
<WindowsFormsHost >
<winforms:RichTextBox />
</WindowsFormsHost>
<RichTextBox />
</UniformGrid>
Run Code Online (Sandbox Code Playgroud)
由于这个有效而你的无效,请尝试找出不同之处。您在评论中说您尝试删除自定义 WPF InputBindings。你在 WinForms 端也做过同样的事情吗?如果没有,请尝试一下,或者如果不可能,请编辑您的问题以显示该代码。
请注意,您可以重新映射ApplicationCommands到您自己的RoutedCommands:只需添加一个CommandBinding并在处理程序中触发您的自定义RoutedCommand。