2009-03-22 7 views
7

Je veux désactiver tous les raccourcis par défaut dans WPF TextBox. Raccourcis comme Ctrl +A, Ctrl +V, Ctrl +C etc. Cela peut-il faire ?. Il me semble que ces raccourcis sont exécutés avant KeyDown événementComment désactiver les raccourcis dans WPF TextBox

+0

Par curiosité: Pourquoi? –

+0

Parce que je fais un contrôle qui permet à l'utilisateur de spécifier un raccourci qu'il veut utiliser pour une action. Et bien sûr, je n'ai pas besoin de tout sélectionner sur Ctrl + A, mais je voudrais simplement l'afficher –

+0

Ah. Je m'attendrais à ce que WPF fournisse un contrôle qui a déjà fait quelque chose de similaire. Merci pour l'info. –

Répondre

3

Vous pouvez intercepter les séquences de touches dans l'événement PreviewKeyDown. Définissez le membre e.Handled sur true et cela empêchera le traitement réel des clés.

+0

Merci. C'est juste au point. Jamais vu cet aperçu avant –

+0

Cela ne fonctionnera que pour les frappes. Que faire si la commande est invoquée via le menu contextuel? Ou le menu de l'application? –

+0

@Kent, je * crois * qui passe par les commandes WPF. Je ne suis pas familier avec leur mise en œuvre et je ne peux pas fournir de commentaires utiles sur la façon dont cela fonctionnerait. Bien que j'aimerais voir quelqu'un le faire. – JaredPar

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

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

Le ci-dessus va empêcher la TextBox de dire qu'il peut gérer toute commande . Vous pouvez choisir sélectivement quelles commandes vous voulez désactiver en examinant le EventArgs. Ou vous pouvez le faire en XAML:

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

Ici, nous ne faisons que désactiver l'exécution de la commande Copier. Control-C ne fonctionnera pas, pas plus que le menu contextuel ou le menu principal. En fait, tout contrôle qui exécute la commande Copier sera désactivé si le focus est dans TextBox.

Questions connexes