2011-10-27 13 views
6

Il WPF TextBox cattura Ctrl-Z e Ctrl-Y per il proprio annullamento/ripetizione. Normalmente grandioso, ma nella nostra app abbiamo alcune caselle di testo che non voglio avere questo comportamento, ma per passare invece all'app globale da gestire come un annullamento globale.Come creare un commutatore pass-through TextBox WPF TextBox?

Ho capito che posso ignorare la gestione di queste caselle di testo aggiungendo CommandBindings per ApplicationCommands.Undo/Redo.

La mia domanda: come posso "inoltrare" questi collegamenti all'elemento quadro principale in modo che venga indirizzato al gestore dell'applicazione che ho installato sulla finestra principale?

Aggiornamento: Grazie a AndrewS è risultato che tutto ciò di cui avevo bisogno era impostare IsUndoEnabled su false. Quindi i comandi dell'app vengono ignorati e la finestra di livello superiore li può gestire. Sìì!

risposta

10

È necessario registrare un KeyBinding per il collegamento e associarlo a ApplicationCommands.NotACommand. per esempio.

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

BTW potresti anche voler impostare IsUndoEnabled su false in modo da non sprecare memoria nella gestione della sua cronologia di annullamento. – AndrewS

+0

Hey questo è interessante. Non sapevo nemmeno che esistesse NotACommand. Per curiosità come sarebbe stato localizzabile? (Suppongo che le tastiere cinesi non utilizzino Ctrl + Z per Annulla.) – scobi

+0

Non conosco nessun buon metodo per ottenerlo. Se si osserva il metodo System.Windows.Input.ApplicationCommands.LoadDefaultGestureFromResource (ad es. In reflector/uispy), ottengono la chiave dalle proprie risorse ma non so se la superano. Probabilmente sarà necessario ottenere InputGestures di ApplicationCommand. (Annulla | Ripeti) e quindi aggiungere dinamicamente gli InputBindings. Potresti riuscire a farlo nel tuo comportamento personale. – AndrewS