2009-03-22 3 views
7

Ich möchte alle Standardverknüpfungen in WPF TextBox deaktivieren. Shortcuts wie Ctrl +A, Ctrl +V, Ctrl +C usw. Kann dies geschehen ?. Es sieht für mich aus, dass diese Verknüpfungen ausgeführt werden, bevor KeyDown EreignisSo deaktivieren Sie Verknüpfungen in WPF TextBox

+0

Aus Neugier: Warum? –

+0

Weil ich ein Steuerelement mache, das dem Benutzer erlaubt, irgendeine Abkürzung zu spezifizieren, die er für irgendeine Tätigkeit verwenden möchte. Und natürlich muss ich nicht alles auf Strg + A auswählen, sondern stattdessen würde ich es nur –

+0

Ah anzeigen. Ich hätte erwartet, dass WPF ein Steuerelement bereitstellt, das bereits etwas Ähnliches getan hat. Danke für die Information. –

Antwort

3

Sie können die Tastenanschläge im PreviewKeyDown Ereignis abfangen. Setzen Sie das e.Handled Element auf true und das wird die tatsächliche Verarbeitung der Schlüssel verhindern.

+0

Danke. Das ist richtig auf den Punkt. Nie zuvor dieses Vorschauereignis gesehen –

+0

Das wird nur für Tastenanschläge funktionieren. Was passiert, wenn der Befehl über das Kontextmenü aufgerufen wird? Oder das Anwendungsmenü? –

+0

@Kent, ich glaube * das geht durch WPF-Befehle. Ich bin mit ihrer Umsetzung sehr wenig vertraut und kann keine nützlichen Kommentare dazu abgeben, wie das funktionieren würde. Obwohl ich gerne jemanden sehen würde. – JaredPar

3
public Window1() 
{ 
    InitializeComponent(); 
    CommandManager.AddPreviewCanExecuteHandler(_textBox, _canExecute); 
} 

private void _canExecute(object sender, CanExecuteRoutedEventArgs e) 
{ 
    e.CanExecute = false; 
    e.Handled = true; 
} 

Die oben wird das TextBox verhindern, sagen, es jeder Befehl verarbeiten kann. Sie können selektiv auswählen, welche Befehle Sie deaktivieren möchten, indem Sie die EventArgs untersuchen. Oder Sie können dies in XAML tun:

<TextBox x:Name="_textBox"> 
    <TextBox.CommandBindings> 
     <CommandBinding Command="ApplicationCommands.Copy" CanExecute="_canExecute"/> 
    </TextBox.CommandBindings> 
</TextBox> 

Hier deaktivieren wir nur die Ausführung des Befehls Kopieren. Control-C funktioniert nicht, weder das Kontextmenü noch das Hauptmenü. Tatsächlich wird jedes Steuerelement, das den Kopierbefehl ausführt, deaktiviert, wenn sich der Fokus auf TextBox befindet.