我想獲得撤消/重做鍵盤快捷鍵在我的WPF應用程序(我有我自己的自定義功能實現使用Command Pattern)工作。但是,似乎TextBox
控件攔截了我的「撤消」RoutedUICommand。WPF TextBox攔截RoutedUICommands
禁用此功能的最簡單方法是什麼,以便我可以在我的UI樹的根上捕獲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!"); }
}
}
真的似乎是唯一的方法...我發現這個蝙蝠狗屎瘋了,好像它會奇怪想要有一個跨越很多輸入控件的撤消堆棧... – flq 2013-01-14 17:16:16
我得到了這個工作。您必須確保使用應用程序命令而不是自定義命令。您還必須將IsUndoEnabled設置爲false,否則它仍將執行文本框實現的撤消操作。 – Asheh 2014-07-25 06:55:06