WPF TextBox Перехват RoutedUICommands

Я пытаюсь заставить горячие клавиши Undo / Redo работать в моем приложении WPF (у меня есть собственные пользовательские функции, реализованные с использованиемШаблон команды). Кажется, однако, чтоTextBox управление перехватывает мою "Undo" RoutedUICommand.

Какой самый простой способ отключить это, чтобы я мог поймать Ctrl + Z в корне дерева пользовательского интерфейса? Я хотел бы избежать добавления тонны кода / XAML в каждыйTextBox в моем приложении, если это возможно.

Следующее вкратце демонстрирует проблему:

<Window x:Class="InputBindingSample.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:loc="clr-namespace:InputBindingSample"
    Title="Window1" Height="300" Width="300">
    <Window.CommandBindings>
        <CommandBinding Command="loc:Window1.MyUndo" Executed="MyUndo_Executed" />
    </Window.CommandBindings>
    <DockPanel LastChildFill="True">
        <StackPanel>
            <Button Content="Ctrl+Z Works If Focus Is Here" />
            <TextBox Text="Ctrl+Z Doesn't Work If Focus Is Here" />
        </StackPanel>
    </DockPanel>
</Window>
using System.Windows;
using System.Windows.Input;

namespace InputBindingSample
{
    public partial class Window1
    {
        public static readonly RoutedUICommand MyUndo = new RoutedUICommand("MyUndo", "MyUndo", typeof(Window1),
            new InputGestureCollection(new[] { new KeyGesture(Key.Z, ModifierKeys.Control) }));

        public Window1() { InitializeComponent(); }

        private void MyUndo_Executed(object sender, ExecutedRoutedEventArgs e) { MessageBox.Show("MyUndo!"); }
    }
}

Ответы на вопрос(6)

Ваш ответ на вопрос