2009-04-23 24 views
8

Metin kutusuna otomatik tamamlamayı yeniden oluşturmayı deneyen özel bir UserControl sahibim. Kullanıcı türleri belirlendiğinde, metin, sağlanan bir öğe koleksiyonunu filtrelemek için kullanılır ve ardından bir Popup, kullanıcının yazdığıla eşleşen öğeler içeren bir ListBox görüntüler.Diğer pencere odakta olduğunda Popup denetimini gizleme

Kullanıcı, uygulamadan başka bir pencereye (tarayıcı, MSWord, bir şey!) Geçiş yapmaya karar verirse, Popup diğer her pencerenin üstünde kalır!

Ayrıca, penceremi (özel denetimi barındıran) açılır pencereyi açarak taşırsam, açılır pencere açılır (ve pencereyi izlemez)! Bu biraz komik ama belli ki kabul edilemez davranışlar. Ben göre etrafına baktı ama sadece iki yıl :(

+0

WPF Otomatik Tamamlayıcı, Şubat 2010 itibariyle şu soruna sahiptir ... :( –

cevap

13

Aslında, StaysOpen özelliğinin true olarak ayarlandığını fark etmemiştim. Aslında bu, benim için hile yapar.

0

için cevapsız kaldı bu yaklaşık bir yazı buldum Popup documentation: Popup ekranda görüntülendiğinde

, kendisini eğer yeniden konumlandırmak değil onun ebeveyn.

tekrar eski konumuna geri yüzden bir otomatik tamamlama metin için çok iyi bir aday olacak gibi görünmüyor. Ben sınıf daha bir öğenin üzerine geldiğinizde bilgileri gösteren içindir düşünüyorum.

+1

ComboBox, Açılır Pencereyi kullanır ve ComboBox hareket ettiğinde bu konumda kalır .. bu yüzden mümkün olmalıdır. – Schneider

4

Benzer bir senaryoda da aynı problemi yaşadım. Yaptığım şey, kontrolün tüm “kaybolan odaklanma” olaylarına abone oldum ve ayrıca kontrolü barındıran ve GotMouseCapture ve LocationChanged olaylarına abone olan pencereyi aldım. Tüm bu olayların olay işleyicileri, açılır pencerenin IsOpen özelliğini yanlış olarak ayarlıyor.

Bu barındırma pencere alabilirsiniz:

parentWindow = Window.GetWindow(this); 

tüm diğer kod basitçe aynı şeyi yapmak için olaylara abone bir çok şey var.

P.S. Güzel ya da en uygun bir çözüm olduğunu söylemiyorum ama benim için iyi çalışıyor :)