WPF

2009-12-16 16 views
8

'daki bir anahtar görüm özelliğine eşdeğerdir Bazı uygulamalarım için WinForms'dan WPF'ye dalmayı düşünürken şu anda birleştirilmiş barkod okuyucu/metin giriş programı (sağlık hizmetleri hasta formları) üzerinde çalışıyorum.WPF

Barkod karakterlerini işleyebilmek için, WinForms'taki Keypreview özelliğine güveniyorum (çünkü, odakta hangi denetimin bulunduğundan bağımsız olarak barkodlar taranabilir).

Ancak bir WPF uygulaması için VS2008 veya VS2010'da bir KeyPreview özelliği bulamıyorum.

WPF'deki barkod karakterleri işlemek için alternatif bir yaklaşım/çözüm var mı?

Rgrds Henry

cevap

3

WPF olay baloncuklanmasını ve tünel kullanır. Başka bir deyişle, olaylar görsel eleman ağacında aşağı doğru ilerler. Bazı etkinliklerde ilgili Önizleme olayı olur. Yani MouseDown, yanıtlayabileceğiniz bir PreviewMouseDown olacaktır. this link'a bakın ve WPF Giriş Olayları bölümüne ilerleyin.

+0

Bağlantı için teşekkürler, PreviewKeyDown olayını bir şekilde yakalamam mümkün olmalı, ona bakacak ... –

5

sen bunu yapabilirsiniz dont oluşturulur herhangi bir öğe üzerinde aşağı tuşu önizleme istiyorsanız

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

(bu UIElementgelen geçersiz kılmak içindir) kendi UserControls veya Denetimleri'nde geçersiz kılmayı kullanın:

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

ve sonra şöyle bir işleyici var: -

void label_PreviewKeyDown(object sender, KeyEventArgs e) { 

    } 

Etkinliği işaretli olarak işaretlerseniz (e.Handled = true;) Bu, yükseltilen KeyDown olayını durduracaktır.

3

Teşekkürler işe yarıyor! Tek sorun VB değil C# kodlama oldu, ama temel fikir tutar. İnce havadaki bir etiketi oluşturmak ve etkinlik akışına kendinizi eklemek için kullanın.

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 

:

başkası aynı çözümün ancak WPF için VB ilgilenen varsa

, burada benim test programı, öyle ne olursa olsun kontrol, daktilo hepsi 'bir' karakter atmak için yönetir odağı PS Bu benim ilk yazı stackoverflow, gerçekten yararlı bir site oldu. Belki de burada kendime daha sonra bazı soruları yanıtlayacağım :-)