2011-06-14 15 views
7

TextBox'un PreviewLostKeyboardFocus olay için bir işleyicim var. TextBox'u klavyeyi (Sekme tuşu) veya fareyi kullanarak (formdaki başka bir TextBox'u tıklatarak) bıraktığımda patlar.Kullanıcı WPF TextBox'tan çıkmak için klavye mi, fare mi kullandı?

işleyicisi (fareyi kullanırken burada null bulmayı umduğum) iki senaryoda da boş değil KeyboardDevice adında bir özelliğe sahip olan bir KeyboardFocusChangedEventArgs, sürer.

Soru: Bir kullanıcının WPF TextBox'tan çıkmak için klavyeyi mi yoksa fareyi mi kullandığını nasıl anlarım?

+0

Odaklama denetimden ayrılırsa, diğer bazı denetimler [kod] (http://msdn.microsoft.com/en-us/library/system.windows.uielement.focus.aspx) odağı alırsa ne olur? – Vlad

+2

Anahtar dinleyici ayarlamak ve sekmeye basıldığını algılamak daha iyi olmaz mıydı? Sekmeli basılırsa, buna göre yanıt verebilirsiniz, Aksi takdirde fareyle olduğu gibi başka yollardan ayrıldıklarını varsayalım. WPF'ye aşina değilim, fakat birçok UI kütüphanesinde sekme tuşunu yakalayabilir ve eylemini geçersiz kılabilirsiniz. Sanırım aslında bir sonraki alana gitmek yerine metin alanına bir sekme eklemek istiyorsunuz. – Kibbee

+0

Burada Kibbee ile aynı fikirdeyim: Tab tuşu için bir 'EventHandler 'ya da örneğin – Damascus

cevap

3

e.KeyboardDevice.GetKeyStates (Key.Tab) (e tipi KeyboardFocusChangedEventArgs ait olduğu) raporları:

Aşağı
  • (fare odağı değiştirmek için kullanıldı)
    • Yok , Değiştirilmiş (SEKME, TextBox'tan çıkmak için kullanıldığında)

    Bu sizin için işe yarar mı?

  • +0

    Ben de bugün bu fikrim vardı, ama burada iki ayrı olayın olması nedeniyle bir zamanlama sorunu olabileceğini düşündüm. Ve burada başka bir yorum da aynı şeyi gözlemledi: Bu, tuşa basıldığında olayın tetiklenip tetiklenmediğine bağlı olarak vakaların% 90'ında işe yarayacaktı. Buna güvenmeyeceğim. – ygoe

    İlgili konular