2011-10-27 54 views
6

WPF文本框捕獲Ctrl-Z和Ctrl-Y以進行自己的撤銷/重做。通常很好,但在我們的應用程序中,我們有一些文本框,我不想有這種行爲,而是通過整體應用程序來處理全局撤消。如何使WPF文本框傳遞ApplicationCommands?

我想通過爲ApplicationCommands.Undo/Redo添加CommandBindings來覆蓋文本框的處理。

我的問題:如何將這些綁定「轉發」到父框架元素,以便它最終路由到我安裝在主窗口上的應用程序處理程序?

更新:由於安卓原來我需要的是IsUndoEnabled設置爲false。然後應用程序命令被忽略,頂層窗口可以處理它們。好極了!

回答

10

您必須爲快捷方式註冊一個KeyBinding並將其與ApplicationCommands.NotACommand關聯。例如

<TextBox> 
     <TextBox.InputBindings> 
      <KeyBinding Key="Y" Modifiers="Control" Command="NotACommand" /> 
      <KeyBinding Key="Z" Modifiers="Control" Command="NotACommand" /> 
     </TextBox.InputBindings> 
    </TextBox> 
+0

順便說一句,您可能還想將IsUndoEnabled設置爲false,因此它不會浪費管理其撤消歷史記錄的內存。 – AndrewS

+0

嘿,這很有趣。甚至不知道NotACommand存在..出於好奇,這將如何進行本地化? (我認爲中文鍵盤不會使用Ctrl + Z進行撤消。) – scobi

+0

我不知道有什麼好方法可以獲得這個功能。如果您查看System.Windows.Input.ApplicationCommands.LoadDefaultGestureFromResource方法(例如,在反射/ uispy中),他們從自己的資源中獲得密鑰,但我不知道它們表現了它。您可能需要獲取ApplicationCommand的InputGestures(Undo | Redo),然後動態添加InputBindings。你可以在你自己的附屬行爲中做到這一點。 – AndrewS