Я пытаюсь получить быстрые клавиши Undo/Redo, работающие в моем приложении WPF (у меня есть собственные пользовательские функции, реализованные с помощью Command Pattern). Однако кажется, что элемент управления TextBox
перехватывает мою команду "Отменить" 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!"); }
}
}