Я озадачен, почему вы не используете встроенные команды:
ApplicationCommands.Undo
и
ApplicationCommands.Redo
Есть несколько преимуществ использования этих встроенных команд :
- Их привязки для ключей автоматически устанавливаются на основе языка (Ctrl + Z и Ctrl + Y не может быть по умолчанию отмены/повтора клавиш во всех локалей)
- Они почитаются
TextBox
и RichTextBox
- Они пересекают WPF < -> WinForms границу без каких-либо проблем
- Они работают с ограниченными интерфейсами
- Они вызываются с помощью встроенного в «отменить» клавиши на клавиатуре, которые имеют их
Поэтому, если возможно, вы должны использовать встроенный ApplicationCommands
, просто зарегистрировав CommandBindings
для них в соответствующих местах вашего кода.
Дополнительная информация
Если вы используете встроенную функциональность Undo/Redo как в 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
.
Мы используем базовый класс для наших команд, у которых есть делегаты в команде, поэтому мы определили все наши команды. Нам было проще перемещать команды Undo/Redo. Но независимо от того, даже если я использую встроенную команду, я все равно получаю ту же проблему. Вводные привязки WPF блокируют одни и те же привязки от работы с текстовыми полями WinForms. –
Что-то странное происходит, так как это нормально работает. Я добавил дополнительную информацию в свой ответ, чтобы помочь вам отследить ее. Это может иметь какое-то отношение к тому, как вы перехватываете Ctrl-Y и Ctrl-Z на стороне WinForms изображения. –
Хотя это может работать для этих специальных клавиш быстрого доступа, оно фактически не отвечает на вопрос или не помогает мне, так как я * не * использую встроенные команды. –