2009-12-16 23 views
8

Estoy pensando en lanzarme a WPF desde WinForms para algunas de mis aplicaciones, actualmente estoy trabajando en el programa combinado de lector de código de barras/entrada de texto (formularios para pacientes de atención médica).Equivalente a una propiedad de vista de clave en WPF

Para poder procesar los caracteres del código de barras, confío en la propiedad Keypreview en WinForms (porque los códigos de barras se pueden escanear independientemente de qué control tenga el foco).

Pero parece que no puedo encontrar una propiedad KeyPreview en VS2008 o VS2010, para una aplicación WPF.

¿Existe un enfoque/solución alternativa para manejar mis caracteres de código de barras en WPF?

Rgrds Henry

Respuesta

3

WPF utiliza burbujeo de eventos y construcción de túneles. En otras palabras, los eventos viajan hacia abajo y hacia arriba en el árbol del elemento visual. Algunos eventos tendrán un evento de vista previa correspondiente. Entonces, MouseDown tendrá un PreviewMouseDown al que puede responder. Consulte this link y desplácese hacia abajo a la sección Eventos de entrada de WPF.

+0

Gracias por el enlace, debería ser posible para mí ver el evento PreviewKeyDown de alguna manera, lo investigaré ... –

5

utilizar la anulación de sus propios UserControls o controles (esto es una anulación de UIElement)

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

si desea previsualizar la tecla abajo sobre cualquier elemento que usted no crea que puede hacer esto:

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

y luego tener un manejador de este modo: -

void label_PreviewKeyDown(object sender, KeyEventArgs e) { 

    } 

si marca el evento como manejado (e.Handled = true;) esto detendrá el evento KeyDown que se está levantando.

3

Gracias lo conseguí trabajando! El único problema fue que estoy codificando en VB, no en C#, pero la idea básica es válida. Limpio para crear una etiqueta de la nada y usarla para insertarse en la secuencia de eventos.

Si alguien más está interesado de la misma solución, pero en VB para WPF, aquí está mi programa de pruebas, se las arregla para tirar todos 'a' caracteres escritos, no importa lo que el control tiene el foco:

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 

PD Esta fue mi primera publicación en stackoverflow, realmente un sitio útil. Tal vez pueda responder algunas preguntas aquí más adelante :-)

Cuestiones relacionadas