WPF TreeView大数据量多层级搜索定位_wpf 树搜索-CSDN博客
Excerpt
文章浏览阅读5.1k次。本文介绍了如何在WPF应用中,使用TreeView实现组织架构的搜索和定位功能。通过AutoCompleteBox进行实时匹配,利用递归组装数据,并优化TreeView的加载速度,解决初次定位耗时问题。
leebin_20 已于 2022-12-07 21:10:08 修改
今天主要说一说公司组织架构这一块,需求是在搜索框输入员工姓名或者首字母,搜索框实时自动匹配到存在的员工,选中某一员工后在组织结构层级树中定位到该员工,就类似于PC版QQ的搜索框。
综上,我们涉及到的控件主要有两个:1.搜索框 2.TreeView
了解WPF的同学肯定立马会想到这个搜索框应该用AutoCompleteBox来做了,没错,我们先通过NuGet引入WPFToolkit,然后在对应的xaml页面引入命名空间:
xmlns:tookit=“clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit”
下来就可以使用了,
1 2 3 4 5 6 7 8 9 10 11 12
| <tookit:AutoCompleteBox x:Name="searchControl" MinimumPopulateDelay="100" ValueMemberPath="Search" FilterMode="Custom" DropDownClosing="SearchControl_DropDownClosing" Style="{DynamicResource AutoCompleteBoxStyle1}"> <tookit:AutoCompleteBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Search}"/> </DataTemplate> </tookit:AutoCompleteBox.ItemTemplate> </tookit:AutoCompleteBox>
|
我这边赋值了3个属性1个事件:
MinimumPopulateDelay=“100”//用户停止输入后多久触发自动匹配,单位毫秒
ValueMemberPath=“Search”//后台对应的关键词属性,即根据实体中的“Search”字段来匹配
FilterMode=“Custom”//自定义过滤模式,需后台代码支持
DropDownClosing=“SearchControl_DropDownClosing”//在这个事件里处理关键词匹配
遗憾的是tookit:AutoCompleteBox没有水印功能,我们只好自己实现一下,眼尖的同学肯定已经看到AutoCompleteBoxStyle1这个样式了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <Style x:Key="AutoCompleteBoxStyle1" TargetType="{x:Type tookit:AutoCompleteBox}"> <Setter Property="IsTabStop" Value="True"/> <Setter Property="BorderThickness" Value="0"/> <Setter Property="BorderBrush"> <Setter.Value> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> <GradientStop Color="#FFA3AEB9" Offset="0"/> <GradientStop Color="#FF8399A9" Offset="0.375"/> <GradientStop Color="#FF718597" Offset="0.375"/> <GradientStop Color="#FF617584" Offset="1"/> </LinearGradientBrush> </Setter.Value> </Setter> <Setter Property="Background" Value="Transparent"/> <Setter Property="Foreground" Value="Black"/> <Setter Property="MinWidth" Value="45"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type tookit:AutoCompleteBox}"> <Border CornerRadius="12 12 0 0" Background="#65D1DF"> <Grid Opacity="{TemplateBinding Opacity}" > <Grid>
|