textbox控件边框设置WPF:AutoCompleteBox,⼀个⾃动完成的⽂本框
WPF:AutoCompleteBox,⼀个⾃动完成的⽂本框
这个WPF⼯具包包括AutoCompleteBox控制室。顾名思义,它是⼀个⾃动完成⽂本框控件。在本⽂中,我们将展⽰如何安装⼯具包以及如何使⽤AutoCompleteBox。
1、安装WPF⼯具包
第⼀步是安装WPF⼯具包。你可以的下载安装程序或者从VisualStudio中的NuGet包管理器安装它。
Install WPF Toolkit from NuGet
从NuGet安装WPF⼯具包
2、引⽤正确的命名空间
AutoCompleteBox位于System.Windows.Controls.Input.Toolkit.dll。必须使⽤以下命名空间:
xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
3、将AutoCompleteBox添加到视图中
假设您有这样⼀个视图模型:
public interface IYourViewModel
{
IEnumerable<string> Names { get; }
string SelectedName { get; set; }
}
然后可以这样添加AutoCompleteBox控件:
<toolkit:AutoCompleteBox
ItemsSource="{Binding Names}"
SelectedItem="{Binding SelectedName, Mode=TwoWay}" />
每当选择更改时,SelectedName属性更新。
4、⾃定义AutoCompleteBox
在⾃定义⽤户体验时,您需要查看以下⼏个有⽤的属性:
IsTextCompletionEnable:“⾃动完成”部分。如果启⽤,将在⽤户开始键⼊时⾃动选择第⼀个匹配项。
FilterMode 过滤模式*设置⾃动完成开始,包含,等于。
最⼩前缀长度在显⽰任何建议之前所需的最少字符数。
None = 0,
StartsWith = 1,
StartsWithCaseSensitive = 2,
StartsWithOrdinal = 3,
StartsWithOrdinalCaseSensitive = 4,
Contains = 5,
ContainsCaseSensitive = 6,
ContainsOrdinal = 7,
ContainsOrdinalCaseSensitive = 8,
Equals = 9,
EqualsCaseSensitive = 10,
EqualsOrdinal = 11,
EqualsOrdinalCaseSensitive = 12,
Custom = 13
5、在⾃定义类中使⽤AutoCompleteBox
现在让我们考虑⼀下,您希望使⽤⾃定义对象⽽不是字符串集合。
public class Person
{
public DateTime Birthday { get; set; }
public string Name { get; set; }
}
视图模型变化不⼤:
public interface IPeopleViewModel
{
IEnumerable<Person> People { get; }
Person SelectedPerson { get; set; }
}
在使⽤控件时,可以指定ValueMemberPath或者价值绑定属性指⽰将⽤于搜索的字段以及⽂本框部分中的显⽰字段。
<toolkit:AutoCompleteBox
ItemsSource="{Binding People}"
SelectedItem="{Binding SelectedPerson, Mode=TwoWay}"
ValueMemberPath="Name"
ItemTemplate="{StaticResource AutoCompleteBoxItemTemplate}" />
因为现在我们正在使⽤对象,所以我们需要指定⼀个模板,否则我们需要指定托斯特林对象的⽅法将⽤于显⽰。
<DataTemplate x:Key="AutoCompleteBoxItemTemplate">
<StackPanel Orientation="Horizontal">
<Label
Content="{Binding Name}"
Width="100" />
<Label
Content="{Binding Birthday}"
FontStyle="Italic"
Foreground="DarkGray" />
</StackPanel>
</DataTemplate>
在这个例⼦中,我们只显⽰名字和⽣⽇。
AutoCompleteBox with custom ItemTemplate
带有⾃定义ItemTemplate的AutoCompleteBox
6、多字段搜索
现在,您已经知道如何对象使⽤AutoCompleteBox,但您希望更改进⾏筛选的⽅式。您可以通过使⽤ItemFilter属性,该属性期望AutoCompleteFilterPredicate代表。
假设Person类现在有⼀个FirstName和LastName属性,并且要在这两个字段中搜索。
public class Person
{
public DateTime Birthday { get; set; }
public string Name { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
在视图模型中创建谓词:
public AutoCompleteFilterPredicate<object> PersonFilter
{
get
{
return (searchText, obj) =>
(obj as Person).FirstName.Contains(searchText)
|| (obj as Person).LastName.Contains(searchText);
}
}
然后在AutoCompleteBox中设置属性:
<toolkit:AutoCompleteBox
ItemsSource="{Binding People}"
SelectedItem="{Binding SelectedPerson, Mode=TwoWay}"
ValueMemberPath="Name"
ItemTemplate="{StaticResource AutoCompleteBoxItemTemplate}"
ItemFilter="{Binding PersonFilter}" />

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。