Sto cercando di ottenere le scorciatoie da tastiera Annulla/Ripristina che funzionano nella mia applicazione WPF (ho implementato la mia funzionalità personalizzata usando lo Command Pattern). Sembra, tuttavia, che il controllo TextBox
stia intercettando il mio RoutedUICommand "Annulla".WPF TextBox che intercetta RoutedUICommands
Qual è il modo più semplice per disattivare questa funzione in modo che sia possibile catturare Ctrl + Z alla radice della struttura della mia interfaccia utente? Vorrei evitare di inserire un sacco di codice/XAML in ogni TextBox
nella mia applicazione, se possibile.
Il seguente dimostra brevemente il problema:
<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!"); }
}
}
Sembra davvero l'unico modo ... Trovo questa pazzia da pipistrello folle, come se fosse strano che volessi avere uno stack di annullamento che si estende su molti controlli di input ... – flq
Ho capito che funziona. Devi assicurarti di utilizzare i comandi delle applicazioni e non quelli personalizzati. È inoltre necessario impostare IsUndoEnabled su false, oppure eseguirà comunque l'annullamento implementato dalla casella di testo. – Asheh