控件我已经弄好了,代码比较多,所以没办法全面介绍。

一开始我是直接继承Selector类来实现,做是做出来了,不过发现性能不太好。于是,我就想着自己来实现。毕竟我是做给自己用的,也不考虑过多的东西,也不像专业控件那样进行复杂封装和样式通用处理。

1、实现在文本框的文本更改时(输入内容)弹出下拉列表,以供选择;

2、下拉列表中的项会根据文本框已输入的内容,显示两种颜色。如果下拉列表中的项的文本里面存在文本框中输入的字符,则显示为另外的颜色;

3、当下拉列表中的项被点击时,就把项中的文本赋值给文本框。

先上几个图,大家看看。

DropdownTextBox类表示带下拉列表的文本框控件,输入框是一个TextBox,放在控件模板中;弹出下拉列表可以使用Popup控件。

DropdownTextBox类的Text属性表示TextBox中的文本,通过属性的双向绑定来实现。DropItems属性用来设置要显示在下拉列表在的项列表。IsDropdownOpened属性指示下拉列表框是否已打开。

当Text属性改变后会引发TextChanged事件。

DropdownItem类表示放在下拉列表框里面的一个项,子控件。模板中放置了一个TextBlock对象,通过该对来实现呈现不同颜色的文本,即使用其Inlines属性。

方法是先把文本框中输入的文本用ToCharArray转为char数组,再分别用数组中的每个char在待选项的文本中查找,如果没找到,即正常颜色(如蓝色),就设置Run元素的前景色为常规颜色;如果找到,说明项中的文本包含输入的字符,就把Run的前景色改为其他颜色(如红色)。最后把所有Run元素都加入到TextBlock的Inlines集合中。

WPF做控件的好处就在于可以把UI单独拿出来设计,控件的UI就可以“拼图”。剩下的工作就是处理代码逻辑了。通常来说,如果只是把控件弄出来自己用的,还比较好办,不虽太严格的思路。如果是专业控件,当然要经过一番痛苦的思考和设计了。

本控件仅供参考,也可能存在许多不足,有兴趣的朋友可以完善完善。

以下是源代码的下载地址:

http://files.cnblogs.com/tcjiaan/dropdownTextBoxApp.zip

[WPF]带下拉列表的文本框的更多相关文章

  1. 在word2010中添加带滚动条的文本框

    由于文件内容过长,为了加强文章的可读性,可以添加一个带滚动条的文本框,既能使文章看起来干净整洁,同时也极大的提高了文章的可读性. 我这里对在word2010中文本框带滚动条作个介绍: 1. 打开wor ...

  2. WPF里面制作圆角文本框

    转自:http://www.cnblogs.com/mengxin523/archive/2010/04/04/1704448.html 本以为WPF里面的XAML会很强大,可以设置很多属性,比如文本 ...

  3. WPF——执行命令清空文本框

    一.造一个窗体,在窗体里面先造一个StackPanel,然后再StackPanel里面放好按钮和文本框,注意给所有的控件和容器起名字 <Grid> <StackPanel Name= ...

  4. wpf小玩意之关键字文本框

    有些时候,我们会碰到在输入文本时高亮一些文本关键字,譬如以下这图: 很明显,这个输入的文本中有四个关键字,正常文本都是黑色,关键字文本用了其他颜色.那么我们如何达到这种效果呢.wpf的textbloc ...

  5. WPF强制设置TextBox文本框的焦点

    在需求中遇到这样一种场景:就是在无论何时都要把焦点设置在一个TextBox中. 引用空间:System.Windows.Input 方式1:在窗体的Load事件中去设置焦点,(注意:不能在窗体的构造函 ...

  6. Android 开发笔记___AutoComplateTextView__自动完成文本框

    原理:EdtText结合监听器TextWatcher与下拉框spinner,一旦监控到EditText的文本发生变化,就自动弹出适配好的文字下拉内容. 属性以及设置方法: XML中的属性 代码中 说明 ...

  7. word 添加文本框

    转https://blog.csdn.net/sroco/article/details/17044973 如何在word2013(2007.2010)中添加带滚动条的文本框 2013年11月30日 ...

  8. jquery clone 获取文本框值得问题

    1 clone 出来的文本框 默认不会把原来的事件也带过去 如果使用 $("#").clone(true);   true  可以将原来的事件带过去 获取文本框的值 可以使用事件 ...

  9. 目录视图摘要视图订阅 基于Extjs开发不允许为空的文本框提示及相应的验证错误提示(转)

    原文地址:http://blog.csdn.net/kunoy/article/details/8007585 本文主要解决问题: 1.区分哪些文本框不允许为空,很多网站都采用在文本框后加*号,ext ...

随机推荐

  1. 介绍两个挺好用的基于Jquery的上传工具

    一.ajaxFileUpload 二.fineUploader

  2. WPF-系统托盘

    WPFSystemTray.cs public class WPFSystemTray { /// <summary> /// 设置系统托盘 /// </summary> // ...

  3. iOS判断是模拟器还是真机

    #if TARGET_IPHONE_SIMULATOR //模拟器   #elif TARGET_OS_IPHONE //真机   #endif

  4. linux一句话轻松提权

    linux命令:‍ [b@fuckks~]$ printf "install uprobes /bin/sh" > exploit.conf; MODPROBE_OPTI** ...

  5. 机器学习&深度学习资料

    机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 1) 机器学习(Machine Learning)&深度学习(Deep Lea ...

  6. CentOS6.5安装中文输入法

    首先进入命令形式的客户端 切换成root用户,输入命令"su root"即可,接着输入 yum install "@Chinese Support" 命令按en ...

  7. easyUI datagrid 根据查询条件 选中对应数据的行

    开始 输入了 土豆,南瓜,再次是小青菜,每次输入点击搜索的时候(模糊查询),选中的当前数据对应的行 在做之前,在网上查询了许多资料,也在技术群里问过许多次,弄了好久终于好了. 第一次写博客真不知道写啥 ...

  8. winform设置文本框宽度 根据文字数量和字体返回宽度

    _LinkLabel.Width = TextRenderer.MeasureText(_LinkLabel.Text, _LinkLabel.Font).Width;

  9. 达梦7的试用 与SQLSERVER的简单技术对比

    达梦7的试用 与SQLSERVER的简单技术对比 达梦数据库公司推出了他们的数据库服务管理平台,可以在该平台使用达梦数据库而无须安装达梦7数据库 地址:http://online.dameng.com ...

  10. 一步步学习javascript基础篇(2):作用域和作用域链

    作用域和作用域链 js的语法用法非常的灵活,且稍不注意就踩坑.这集来分析下作用域和作用域链.我们且从几道题目入手,您可以试着在心里猜想着答案. 问题一. if (true) { var str = & ...