2011-10-27 1 views
6

WPF TextBoxは、独自の元に戻す/やり直しを行うためにCtrl-ZとCtrl-Yをキャプチャします。通常は素晴らしいですが、私たちのアプリでは、このような動作をしたくないテキストボックスがありますが、代わりにアプリケーション全体に渡ってグローバルな元に戻すことができます。WPF TextBoxパススルーApplicationCommandsを作成するには?

私は、これらのテキストボックスの処理を、ApplicationCommands.Undo/RedoのCommandBindingsを追加することによって変更することができます。

私の質問:どのように最終的にメインウィンドウにインストールされたアプリケーションのハンドラにルーティングするように、それらのバインディングを親フレームワーク要素に '転送'できますか?

更新: AndrewSのおかげで、私が必要としたのは、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メソッド(リフレクタ/ユーズピーなど)を見ると、彼らは自分のリソースからキーを取得していますが、私はそれが表面化しているかどうかわかりません。おそらく、ApplicationCommandのInputGestures(Undo | Redo)を取得し、次にInputBindingsを動的に追加する必要があります。あなたは自分自身の行動でそれを行うことができるかもしれません。 – AndrewS

関連する問題