我有一个
WPF应用程序,其主窗口上有以下KeyBinding:
<KeyBinding Command="Commands:EditCommands.Undo" Gesture="CTRL+Z" />
<KeyBinding Command="Commands:EditCommands.Redo" Gesture="CTRL+Y" />
这使命令响应快捷方式.但是,在我嵌入WinForms文本框或富文本框的所有地方,我都失去了使用这些快捷方式的能力.如果我删除上面的绑定,WinForms快捷方式可以正常工作.
如何在WinForms和WPF中支持这些快捷方式?我更喜欢通用方法,因为这个问题可能会影响具有相同键绑定的许多其他命令.
最佳答案 我很困惑你为什么不使用内置命令:
> ApplicationCommands.Undo,和
> ApplicationCommands.Redo
使用这些内置命令有几个优点:
>它们的键绑定是根据区域设置自动设置的(Ctrl Z和Ctrl Y可能不是所有语言环境中的默认撤消/重做键)
>他们受到TextBox和RichTextBox的尊重
>他们越过WPF< – > WinForms边界没有任何问题
>他们使用辅助功能界面
>它们由具有它们的键盘上的内置“撤销”键调用
因此,如果可能,您应该使用内置的ApplicationCommands,只需在代码中的适当位置为它们注册CommandBindings.
更多信息
如果您在WPF和WinForms中使用内置的撤消/重做功能,它就可以正常工作.例如,下面创建了两个RichTextBox,一个基于WinForms,另一个基于WPF,并且都具有完全撤消/重做功能:
<UniformGrid Columns="2"
xmlns:winforms=
"clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms">
<WindowsFormsHost >
<winforms:RichTextBox />
</WindowsFormsHost>
<RichTextBox />
</UniformGrid>
既然这样做而你的没有,那么试着找出不同的东西.您在评论中说过您尝试删除自定义WPF InputBindings.你在WinForms方面做过同样的事吗?如果没有,请尝试,或者如果不可能,请编辑您的问题以显示该代码.
请注意,您可以将ApplicationCommands重新映射到自己的RoutedCommands中:只需添加一个CommandBinding,然后在处理程序中激活您的自定义RoutedCommand.