Windows Form Uygulaması
AutoComplete, visual studio da windows Formda bulunan textbox controlünün bir özelliği. bu özellik textboxın combobox gibi kullanılabilmesini sağlar. textbox' a girdiğiniz ilk karakterlere göre onceden tanımlı listede en uygunu textboxda yazılı ve seçili hale gelmesini sağlar. Aynı özellik Wpf uygulamalarındaki textbox 'larda bulunmuyor . Bunun için de bir çözüm var elbette yazının ileriki kısımlarında bahsetmeye çalısacağım. Windows Form da uygulama yaparak anlatmaya çalısalım.
Yukarıdaki forma yerleştirdiğimiz textbox' ın özelliklerinden AutoCompleteMode özelliğine aşağıdaki atamaları tanımlayalım.
AutoCompleteMode:
*Varsayılan olarak None değerini içerir
*Append, yazılan harflere uyan ilk kelimenin kalanını textbox’a ekler ve seçili hale getirir.
*Suggest, aşağı açılan listeyi gösterir.
*SuggestAppend, hem aşağı açılan listeyi gösterir, hem de yazılan harflere uyan ilk kelimenin kalanını textbox’a ekler ve seçili hale getirir.
AutoCompleteCustomSource:AutoCompleteSource özelliği CustomSource olarak atanmışsa AutoCompleteCustomSource özelliği string dizisi olarak listeyi tutar.
Form'un Load olayında, textbox'ımızın AutoCompleteMode ve AutoCompleteCustomSource özelliklerine değer atamaları yapalım;
txtsehir.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
txtsehir.AutoCompleteSource = AutoCompleteSource.CustomSource;
txtsehir.AutoCompleteCustomSource.AddRange(new string[] { "İstanbul", "Ankara", "İzmir", "Sivas", "Samsun", "Çankırı" });
Ekran Çıktısı:
Wpf Uygulaması
Yukarıdada belirttiğim gibi textbox ın kendinde AutoComplete özelliği bulunmuyor. Bunun için bazı kütüphaneleri projemizin referance kısmına eklememiz gerekmektedir
*System.Windows.Controls.Input.Toolkit.dll
*WPFToolkit.dll
Bu kütüphanelere buradan ulaşabilirsiniz.Wpf xaml dosyasına aşağıdaki tanımlamayı eklememiz gerekmektedir.
xmlns:controls="clrnamespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
xaml deki Grid tagları arasına aşağıdaki kodu yazalım;
<controls:AutoCompleteBox IsTextCompletionEnabled="True" Text="{Binding Path= kelime}" ItemsSource="{Binding Path=liste,Mode=TwoWay}" x:Name="deneme" Height="27" Populating="tbAssembly_Populating_1" Margin="49,61,133,223" >
</controls:AutoCompleteBox>
xaml.cs dosyasında olusan populating olayına ise aşağıdaki tanımlamaları yapalım.
List<string> son= new List<string>();
private void tbAssembly_Populating_1(object sender, PopulatingEventArgs e)
{<controls:AutoCompleteBox IsTextCompletionEnabled="True" Text="{Binding Path= kelime}" ItemsSource="{Binding Path=liste,Mode=TwoWay}" x:Name="deneme" Height="27" Populating="tbAssembly_Populating_1" Margin="49,61,133,223" >
</controls:AutoCompleteBox>
xaml.cs dosyasında olusan populating olayına ise aşağıdaki tanımlamaları yapalım.
List<string> son= new List<string>();
private void tbAssembly_Populating_1(object sender, PopulatingEventArgs e)
string text = deneme.Text;
son.Add("İstanbul");
son.Add("Ankara");
son.Add("İzmir");
son.Add("Sivas");
son.Add("Samsun");
son.Add("Çankırı"); deneme.ItemsSource = son;
}
Wpf de Simple Mvvm yapısı kullanıyorsak ;
ViewModel kısmında propertiesi tanımlıyoruz;
private ObservableCollection<string> _autoListe;
public ObservableCollection<string> AutoListe
{ get { return _autoListe; }
set
{
_autoListe = value;
NotifyPropertyChanged(m => m.AutoListe);
}
Method kısmında ise sayfanın load methodunun içine yukarıdaki gibi şehir isimlerini tanımlayabiliriz.
AutoListe.Add("İstanbul");
Hiç yorum yok:
Yorum Gönder