Makale Özeti

Uygulamalarda bir şey ararken bazen ne arayacağımızı tam olarak bilmeyiz ya da aradığımız şeyin tüm adını hatırlayamayız. Bu nedenle artık sistemler kullanıcılara kolaylık sağlamak amacıyla, kullanıcı arama yapmak için bir şeyler yazarken o yazdığı textle başlayan ya da o texti içeren verileri yazdığımız controlün altında listeler.

Makale

Uygulamalarda bir şey ararken bazen ne arayacağımızı tam olarak bilmeyiz ya da aradığımız şeyin tüm adını hatırlayamayız. Bu nedenle artık sistemler kullanıcılara kolaylık sağlamak amacıyla, kullanıcı arama yapmak için bir şeyler yazarken o yazdığı textle başlayan ya da o texti içeren verileri, yazdığımız controlün altında listeler. Bunun en basti örneğini google.com.tr sitesinde görebiliriz. 

 

Sizlere autocomplete denen bu özelliği wpf textboxta nasıl uygulayacağımızı anlatmaya çalışacağız.

Xaml

Usercontrolümüzün içinde bir tane stackpanel ve stackpanelin içinde de bir tane textbox ve popup controlleri 
bulunmaktadır. Textbox controlünü arama yapacağımız texti yazmak için pop up ve pop up controlün içindeki
listbox controlünü de arama sonuçlarını listelemek için kullanacağız.
 Cs

Kullanıcının autocompletetextbox usercontrolü içinde yer alan textbox kontrolünde yaptığı her değişikliği dışarıya bilgilendirmek için TextChangedEventHandler tipinde bir event tanımladık. ItemsSource propertisi ise usercontrolün kullanıldığı yerde arama sonucunda elde edilen sonuçları autocompletetextbox usercontrolü içinde yer alan listbox kontrolde listelenmesini sağlamak amacıyla public olarak belirtiyoruz.

ListBox_MouseLeftButtonUp event handlerı kullanıcının, arama sonuçlarının listelendiği listboxtan seçtiği itemın textinin, textboxa yazılmasını sağlamak için implement edilmiştir. Kullanıcının listeden seçtiği item direk olarak ListBoxItem tipinde olmadğı için, bu tipteki değişkeni bulana kadar seçilen itemın parentından başlayarak yukarıya doğru aramaya devam ediyoruz.

Usercontrolün load eventinde popup controlün boyutlarını ayarladıktan sonra, autocompletetextbox controlün yer aldığı windowu bulup, bu window kullanıcı tarafından mousela taşındığı zaman popup controlü kapatmak için LocationChanged eventini dinliyoruz.

 Usercontrolün textboxında yapılan değişiklikleri TextBox_TextChanged eventhanlerı ile TextChangedEventHandler event değişkeni ile dışarıya açıp, dışarda ilgili mantığın işletilmesini sağlıyoruz.

SetTextBoxText fonksiyonu içinde ise textbox kontrolünün textini kod içinden değiştiriyoruz. Kod içinden textbox kontrolün textini değiştirmeden önce textbox kontrolün TextChanged eventine düşmemek için önce detach olup, textte değişiklik yaptıktan sonra tekrar eventa attach oluyoruz.

Mainwindow cs 

Uygulamada windowa bir tane autocompletetextbox controlümüzden koyuyoruz ve bu controlümüzün TextChangedEventHandler eventini dinleyerek iş mantığını gerçekleştiriyoruz. Bu iş mantığının içinde gördüğünüz gibi ülkemizdeki şehirlerin adlarının tutulduğu bir listeden, kullanıcının girdiği texte bakıp arama yaparak dönen sonucu autocompletetextbox controlümüzün ItemsSource porpertisine atayarak sonuçların autocompletetextbox controlümüzün listboxında görüntülenmesini sağlıyoruz.

Bu makalemizde autocomplete mantığının ne olduğunu, bu mantığının wpf textboxt'ta nasıl uygulanılabileceğini anlatmaya çalıştık. Bir sonraki makalemizde görüşmek üzere...

Sezgin ZEKA 

sezginzeka@gmail.com

WpfAutoCompleteTextBox.rar