我很困惑为什么你不使用内置命令:
ApplicationCommands.Undo
, 和
ApplicationCommands.Redo
使用这些内置命令有几个优点:
- 它们的键绑定会根据语言环境自动为您设置(Ctrl+Z和Ctrl+Y可能不是所有语言环境中的默认撤消/重做键)
- 他们被授予
TextBox
和RichTextBox
- 他们跨越 WPF <-> WinForms 边界没有任何问题
- 他们使用可访问性界面
- 它们由具有它们的键盘上的内置“撤消”键调用
因此,如果可能的话,您应该通过在代码中的适当位置ApplicationCommands
简单地注册它们来使用内置。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>
由于这有效而您的无效,因此请尝试找出不同之处。您在评论中说您尝试删除自定义 WPF InputBindings
。你在 WinForms 方面做过同样的事情吗?如果没有,请尝试一下,或者如果不可能,请编辑您的问题以显示该代码。
请注意,您可以重新映射ApplicationCommands
到您自己的RoutedCommands
:只需添加一个CommandBinding
并在处理程序中触发您的自定义RoutedCommand
。