参考链接:
WPF-15:AutoCompleteBox的使用(实现下拉列表)
WPF: AutoCompleteBox, an autocomplete text box
如果出现未能加载程序集,可以参照这篇回答
准备:
WpfToolKit.dll,System.Windows.Controls.Input.Toolkit.dll下载或通过nuget搜索安装,下载链接在第一个博客中
内容:
前端
通过wpftool框架实现自动补全信息或智能选择的功能
在前端添加
xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
在窗口内实现AutoCompleteBox
1 2 3 4 5 6 7 8 9 10 11
| <toolkit:AutoCompleteBox x:Name="searchTextBox" Grid.Row="1" ValueMemberPath="SerchString" Margin="10" FontSize="20" Height="50" IsTextCompletionEnabled="True" Foreground="Black"> <toolkit:AutoCompleteBox.ItemTemplate> <DataTemplate> <TextBlock Margin="5,5" FontSize="26"> <Run Text="{Binding SerchString}" Foreground="Blue"/> <Run Text="{Binding Name}" Foreground="Gray"/> </TextBlock> </DataTemplate> </toolkit:AutoCompleteBox.ItemTemplate> </toolkit:AutoCompleteBox>
|
后端
实现MVVM,实现INotPropertyChanged接口,并创建事件将内容进行绑定,因为是实现代码,与第一个博客中内容基本一直,但是博客中本身的MessageBox会引发进程错误,这一块并没有搞懂,因为不u影响功能的实现,所以将语句注释掉了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.searchTextBox.Populating += new PopulatingEventHandler(AutoCompleteBox_Populating); this.searchTextBox.SelectionChanged += new SelectionChangedEventHandler(SearchTextBox_selectionChanged); } void SearchTextBox_selectionChanged(object seder,SelectionChangedEventArgs e) { AutoCompleteModel model = this.searchTextBox.SelectedItem as AutoCompleteModel; //if (model != null) //{ // MessageBox.Show(model.Name); //} } private void AutoCompleteBox_Populating(object sender,PopulatingEventArgs e) { e.Cancel = true; List<AutoCompleteModel> data = new List<AutoCompleteModel>(); for(int i = 0; i < 10; i++) { AutoCompleteModel model = new AutoCompleteModel(); model.SerchString = "0"+ i.ToString(); model.Name = "测试" + i; data.Add(model); } this.searchTextBox.ItemsSource = data; this.searchTextBox.FilterMode = AutoCompleteFilterMode.Contains; this.searchTextBox.PopulateComplete(); } public class AutoCompleteModel : INotifyPropertyChanged { public void OnProperrtChanged(string proname) { if (this.PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(proname)); } public event PropertyChangedEventHandler PropertyChanged;
private string searchString = string.Empty; private string name = string.Empty;
public string SerchString { get { return searchString; } set { searchString = value; this.OnProperrtChanged("SearchString"); } }
public string Name { get { return name; } set { name = value; this.OnProperrtChanged("Name"); } } } }
|