WPF TextBox Abfangen von RoutedUIC-Befehlen

Ich versuche, in meiner WPF - Anwendung die Tastaturkürzel "Rückgängig" / "Wiederherstellen" zum Laufen zu bringen (ich habe meine eigene benutzerdefinierte Funktionalität unter Verwendung von implementiert)Befehlsmuster). Es scheint jedoch, dass dieTextBox Die Steuerung fängt meinen RoutedUICommand "Rückgängig" ab.

Was ist die einfachste Möglichkeit, dies zu deaktivieren, damit ich Strg + Z im Stammverzeichnis meines UI-Baums abfangen kann? Ich möchte vermeiden, eine Tonne Code / XAML in jedes zu setzenTextBox wenn möglich in meiner Bewerbung.

Im Folgenden wird das Problem kurz erläutert:

<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!"); }
    }
}

Antworten auf die Frage(6)

Ihre Antwort auf die Frage