2009-12-16 8 views
8

Je réfléchis à franchir le pas vers WPF de WinForms pour certaines de mes applications, actuellement je travaille sur le programme combiné lecteur de code-barres/saisie de texte (formulaires patients de soins de santé).Equivalent à une propriété keypreview dans WPF

Pour pouvoir traiter les caractères du code-barres, je m'appuie sur la propriété Keypreview dans WinForms (car les codes-barres peuvent être analysés quel que soit le contrôle utilisé).

Mais je n'arrive pas à trouver une propriété KeyPreview dans VS2008 ou VS2010, pour une application WPF.

Existe-t-il une approche/solution alternative pour gérer mes caractères de code à barres dans WPF?

Rgrds Henry

Répondre

3

WPF utilise des événements et bouillonnante tunnel. En d'autres termes, les événements parcourent l'arbre des éléments visuels. Certains événements auront un événement Preview correspondant. Donc MouseDown aura un PreviewMouseDown auquel vous pouvez répondre. Découvrez this link et faites défiler jusqu'à la section Événements de saisie WPF.

+0

Merci pour le lien, devrait être possible pour moi d'attraper l'événement PreviewKeyDown en quelque sorte, se penchera sur elle ... –

5

utiliser le remplacement dans vos propres UserControls ou contrôle (ce qui est un remplacement de UIElement)

protected override void OnPreviewKeyDown(System.Windows.Input.KeyEventArgs e) { 
    base.OnPreviewKeyDown(e); 
    } 

si vous voulez un aperçu de la clé vers le bas sur un élément qui vous ne créez que vous pouvez faire ceci:

Label label = new Label(); 
label.PreviewKeyDown += new KeyEventHandler(label_PreviewKeyDown); 

et ont un gestionnaire comme ceci: -

void label_PreviewKeyDown(object sender, KeyEventArgs e) { 

    } 

si vous marquez l'événement comme étant géré (e.Handled = true;) cela arrêtera l'événement KeyDown soulevé.

3

Merci pour votre travail! Le seul problème était que je suis en train de coder en VB et pas en C#, mais l'idée de base est la même. Neat pour créer une étiquette à partir de rien et l'utiliser pour vous insérer dans le flux d'événements.

Si quelqu'un d'autre est intéressé de la même solution, mais en VB pour WPF, voici mon programme de test, il parvient à lancer tous les « a » des personnages typés, peu importe ce que le contrôle a le focus:

Class MainWindow 

    Dim WithEvents labelFromThinAir As Label 

    Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded 
     AddHandler MainWindow.PreviewKeyDown, AddressOf labelFromThinAir_PreviewKeyDown 
    End Sub 

    Private Sub labelFromThinAir_PreviewKeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) 
     TextBox1.Text = e.Key ' watch 'em coming 
     If (44 = e.Key) Then e.Handled = True 
    End Sub 

End Class 

PS C'était mon premier article sur stackoverflow, un site vraiment utile. Peut-être que je serai en mesure de répondre à quelques questions ici moi-même plus tard :-)