开发者社区> 杰克.陈> 正文

背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox

简介: 原文:背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox [源码下载] 背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox 作者:webabcd介绍背水一战 Windows 10 之 控件(文本类) Auto...
+关注继续查看
原文:背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox

[源码下载]


背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox



作者:webabcd


介绍
背水一战 Windows 10 之 控件(文本类)

  • AutoSuggestBox



示例
Controls/TextControl/AutoSuggestBoxDemo.xaml

<Page
    x:Class="Windows10.Controls.TextControl.AutoSuggestBoxDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows10.Controls.TextControl"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="Transparent">
        <StackPanel Margin="10 0 10 10">

            <TextBlock Margin="5" Text="{x:Bind autoSuggestBox.Text,Mode=OneWay}" />
            <TextBlock Name="lblMsg1" Margin="5" />
            <TextBlock Name="lblMsg2" Margin="5" />
            
            <!--
                AutoSuggestBox - 自动建议文本框(继承自 Windows.UI.Xaml.Controls.ItemsControl)
                    Header - 可以设置一个纯文本,不能命中测试,空 Header 的话不会占用任何空间
                    PlaceholderText - 占位符水印
                    Text - 文本框内显示的文本
                    AutoMaximizeSuggestionArea - 建议框(即下拉部分)的区域是否最大化
                    MaxSuggestionListHeight - 建议框(即下拉部分)的最大高度
                    IsSuggestionListOpen -  建议框(即下拉部分)是否是打开状态
                    QueryIcon - 文本框右侧显示的 icon(IconElement 类型),关于 IconElement 请参见 /Controls/IconControl/IconElementDemo.xaml
                        本例中指定为 Find,也就是说设置的是 SymbolIcon 类型(当然也可以指定为 IconElement 的其他派生类型)
            -->
            <AutoSuggestBox Name="autoSuggestBox" Margin="5" ItemsSource="{x:Bind Suggestions}"
                            Header="AutoSuggestBox" PlaceholderText="AutoSuggestBox" QueryIcon="Find">
                <AutoSuggestBox.ItemTemplate>
                    <DataTemplate x:DataType="local:SuggestionModel">
                        <StackPanel Orientation="Horizontal">
                            <Image Source="{x:Bind ImageUrl}" Width="20" Height="20" />
                            <TextBlock Text="{x:Bind Title}" FontSize="20" />
                        </StackPanel>
                    </DataTemplate>
                </AutoSuggestBox.ItemTemplate>
            </AutoSuggestBox>


            <!--
            可以将 QueryIcon 设置为 SymbolIcon 或 FontIcon 或 PathIcon 或 BitmapIcon
            <AutoSuggestBox>
                <AutoSuggestBox.QueryIcon>
                    <BitmapIcon UriSource="" />
                </AutoSuggestBox.QueryIcon>
            </AutoSuggestBox>
            -->
            
        </StackPanel>
    </Grid>
</Page>


Controls/TextControl/AutoSuggestBoxDemo.xaml.cs

/*
 * AutoSuggestBox - 自动建议文本框(继承自 ItemsControl, 请参见 /Controls/CollectionControl/ItemsControlDemo/)
 *     TextMemberPath - 建议框中的对象映射到文本框中时的字段名(如果建议框中显示的只是字符串,就不用设置这个了)
 *     UpdateTextOnSelect - 单击建议框中的项时,是否将其中的 TextMemberPath 指定的值赋值给文本框
 *     SuggestionChosen - 在建议框(即下拉部分)中选择了某一项后触发的事件
 *     TextChanged - 文本框中的输入文本发生变化时触发的事件
 *     QuerySubmitted - 用户提交查询时触发的事件(可以通过回车提交,可以通过点击文本框右侧的图标提交,可以通过在下拉框中选择某一项提交)
 *
 * 注:SearchBox 弃用了
 */

using System;
using System.Collections.ObjectModel;
using Windows.UI.Xaml.Controls;

namespace Windows10.Controls.TextControl
{
    public sealed partial class AutoSuggestBoxDemo : Page
    {
        public ObservableCollection<SuggestionModel> Suggestions { get; set; } = new ObservableCollection<SuggestionModel>();
     
        public AutoSuggestBoxDemo()
        {
            this.InitializeComponent();
            
            // 数据源有 Title 字段和 ImageUrl 字段,当用户在建议框中选中某一个对象时,会将 Title 字段指定的值赋值给文本框
            autoSuggestBox.TextMemberPath = "Title";
            // 用户选中建议框中的对象时,是否将 TextMemberPath 指定的值赋值给文本框
            autoSuggestBox.UpdateTextOnSelect = true;

            autoSuggestBox.TextChanged += autoSuggestBox_TextChanged;
            autoSuggestBox.SuggestionChosen += autoSuggestBox_SuggestionChosen;
            autoSuggestBox.QuerySubmitted += AutoSuggestBox_QuerySubmitted;
        }

        void autoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
        {
            // 因为用户的输入而使得 Text 发生变化
            if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput)
            {
                Suggestions.Clear();

                // 根据用户的输入,修改 AutoSuggestBox 的数据源
                for (int i = 0; i < 10; i++)
                {
                    Suggestions.Add(new SuggestionModel()
                    {
                        Title = (sender.Text + "_" + i.ToString()),
                        ImageUrl = "/Assets/StoreLogo.png"
                    });
                }
            }
            // 通过代码使 Text 发生变化
            else if (args.Reason == AutoSuggestionBoxTextChangeReason.ProgrammaticChange)
            {

            }
            // 因为用户在建议框(即下拉部分)选择了某一项而使得 Text 发生变化
            else if (args.Reason == AutoSuggestionBoxTextChangeReason.SuggestionChosen)
            {

            }
        }

        void autoSuggestBox_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args)
        {
            // AutoSuggestBoxSuggestionChosenEventArgs
            //     SelectedItem - 在建议框(即下拉部分)中选择的对象
            lblMsg1.Text = "选中的是:" + ((SuggestionModel)args.SelectedItem).Title;
        }

        private void AutoSuggestBox_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args)
        {
            lblMsg2.Text = $"用户提交了查询, 查询内容: {args.QueryText}";
            if (args.ChosenSuggestion != null)
            {
                lblMsg2.Text += Environment.NewLine;
                lblMsg2.Text += $"用户提交了查询(通过在下拉框中选择某一项的方式提交), 查询内容: {((SuggestionModel)args.ChosenSuggestion).Title}";
            }
        }
    }

    public class SuggestionModel
    {
        public string Title { get; set; }
        public string ImageUrl { get; set; }
    }
}



OK
[源码下载]

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C#实现操作Windows窗口句柄:遍历、查找窗体和控件【窗口句柄最全总结之一】
C#对Windows窗口或窗口句柄的操作,都是通过 P/Invoke Win32 API 实现的,DllImport引入Windows API操作窗口(句柄),可以实现枚举已打开的窗口、向窗口...
496 0
Windows程序设计——Windows单选按钮、复选框、分组框控件
Windows程序设计——Windows单选按钮、复选框、分组框控件
316 0
Windows程序设计——(源代码)Windows单选按钮、复选框、分组框控件
Windows程序设计——(源代码)Windows单选按钮、复选框、分组框控件
77 0
windows窗口中控件的样式
windows窗口中控件的样式一.按钮样式 button BS_AUTO3STATE 创建一个与三态复选框相同的按钮,但该框在用户选择时更改其状态。状态循环通过检查,不确定和清除。 BS_AUTOCHECKBOX 创建一个与复选框相同的按钮,但每次用户选中复选框时,检查状态会自动在已选中和已清除之间切换。
1179 0
使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题
原文 使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题 虽然微软宣称 Windows 10 将是最后一个 Windows 版本,但由于年代跨越实在太久远,兼容性依然是避不开的问题。
1649 0
WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit)
原文 WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit) Windows Community Toolkit 再次更新到 5.0。
1724 0
背水一战 Windows 10 (79) - 自定义控件: Layout 系统, 控件模板, 事件处理
原文:背水一战 Windows 10 (79) - 自定义控件: Layout 系统, 控件模板, 事件处理 [源码下载] 背水一战 Windows 10 (79) - 自定义控件: Layout 系统, 控件模板, 事件处理 作者:webabcd介绍背水一战 Windows 10 之 控件(自...
862 0
背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中的元素
原文:背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中的元素 [源码下载] 背水一战 Windows 10 (76) - 控件(控件基类): Control -...
1019 0
背水一战 Windows 10 (77) - 控件(控件基类): ContentControl, UserControl, Page
原文:背水一战 Windows 10 (77) - 控件(控件基类): ContentControl, UserControl, Page [源码下载] 背水一战 Windows 10 (77) - 控件(控件基类): ContentControl, UserControl, Page 作者:w...
827 0
背水一战 Windows 10 (75) - 控件(控件基类): FrameworkElement - 基础知识, 相关事件, HorizontalAlignment, VerticalAlignment
原文:背水一战 Windows 10 (75) - 控件(控件基类): FrameworkElement - 基础知识, 相关事件, HorizontalAlignment, VerticalAlignment [源码下载] 背水一战 Windows 10 (75) - 控件(控件基类): Fra...
943 0
+关注
杰克.陈
一个安静的程序猿~
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
ECS运维指南之Windows系统诊断
立即下载
TAKING WINDOWS 10 KERNEL
立即下载
《云服务器运维之Windows篇》
立即下载