Próbuję uzyskać skróty klawiaturowe Undo/Redo działające w mojej aplikacji WPF (mam własną niestandardową funkcjonalność zaimplementowaną przy użyciu Command Pattern). Wydaje się jednak, że kontrolka TextBox
przechwytuje moją "Cofnij" RoutedUICommand.WPF TextBox Przechwytywanie RoutedUICommands
Jaki jest najprostszy sposób, aby wyłączyć tę opcję, aby można było przechwycić Ctrl + Z w katalogu głównym mojego drzewa interfejsu użytkownika? Chciałbym uniknąć umieszczenia ton kodu/XAML w każdym TextBox
w mojej aplikacji, jeśli to możliwe.
Poniżej krótko przedstawia problem:
<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!"); }
}
}
Naprawdę wydaje się, że jest to jedyny sposób ... Uważam, że ten nietoperz jest szalony, tak jakby to było dziwne, że chce mieć stos cofania, który obejmuje wiele kontrolek wejściowych ... – flq
Mam to do pracy. Musisz upewnić się, że używasz poleceń aplikacji, a nie niestandardowych. Musisz także ustawić wartość IsUndoEnabled na false lub nadal będzie ona wykonywać operację cofania, którą implementuje pole tekstowe. – Asheh