[WPF]带下拉列表的文本框
控件我已经弄好了,代码比较多,所以没办法全面介绍。
一开始我是直接继承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]带下拉列表的文本框的更多相关文章
- 在word2010中添加带滚动条的文本框
由于文件内容过长,为了加强文章的可读性,可以添加一个带滚动条的文本框,既能使文章看起来干净整洁,同时也极大的提高了文章的可读性. 我这里对在word2010中文本框带滚动条作个介绍: 1. 打开wor ...
- WPF里面制作圆角文本框
转自:http://www.cnblogs.com/mengxin523/archive/2010/04/04/1704448.html 本以为WPF里面的XAML会很强大,可以设置很多属性,比如文本 ...
- WPF——执行命令清空文本框
一.造一个窗体,在窗体里面先造一个StackPanel,然后再StackPanel里面放好按钮和文本框,注意给所有的控件和容器起名字 <Grid> <StackPanel Name= ...
- wpf小玩意之关键字文本框
有些时候,我们会碰到在输入文本时高亮一些文本关键字,譬如以下这图: 很明显,这个输入的文本中有四个关键字,正常文本都是黑色,关键字文本用了其他颜色.那么我们如何达到这种效果呢.wpf的textbloc ...
- WPF强制设置TextBox文本框的焦点
在需求中遇到这样一种场景:就是在无论何时都要把焦点设置在一个TextBox中. 引用空间:System.Windows.Input 方式1:在窗体的Load事件中去设置焦点,(注意:不能在窗体的构造函 ...
- Android 开发笔记___AutoComplateTextView__自动完成文本框
原理:EdtText结合监听器TextWatcher与下拉框spinner,一旦监控到EditText的文本发生变化,就自动弹出适配好的文字下拉内容. 属性以及设置方法: XML中的属性 代码中 说明 ...
- word 添加文本框
转https://blog.csdn.net/sroco/article/details/17044973 如何在word2013(2007.2010)中添加带滚动条的文本框 2013年11月30日 ...
- jquery clone 获取文本框值得问题
1 clone 出来的文本框 默认不会把原来的事件也带过去 如果使用 $("#").clone(true); true 可以将原来的事件带过去 获取文本框的值 可以使用事件 ...
- 目录视图摘要视图订阅 基于Extjs开发不允许为空的文本框提示及相应的验证错误提示(转)
原文地址:http://blog.csdn.net/kunoy/article/details/8007585 本文主要解决问题: 1.区分哪些文本框不允许为空,很多网站都采用在文本框后加*号,ext ...
随机推荐
- 【原】iOS学习之苹果原生代码实现Autolayout和VFL语言
1.添加约束的规则 在创建约束之后,需要将其添加到作用的view上 在添加时要注意目标view需要遵循以下规则: 1)对于 两个同层级view之间 的约束关系,添加到它们的父view上 2)对于 两个 ...
- java try(){}catch(){}自动资源释放
从 Java 7 build 105 版本开始,Java 7 的编译器和运行环境支持新的 try-with-resources 语句,称为 ARM 块(Automatic Resource Manag ...
- Linux内核笔记--网络子系统初探
内核版本:linux-2.6.11 本文对Linux网络子系统的收发包的流程进行一个大致梳理,以流水账的形式记录从应用层write一个socket开始到这些数据被应用层read出来的这个过程中linu ...
- python中的函数
Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- [BZOJ4200][Noi2015]小园丁与老司机
4200: [Noi2015]小园丁与老司机 Time Limit: 20 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 106 Solved ...
- sql server的优缺点
sql server的优点众多,让其在数据库领域独占鳌头,成为最受欢迎的数据库系统,其优缺点也自然是喜爱者们所关注的,首先了解一下它的历史: sql server是一个关系型数据库管理系统,最初是由M ...
- swift初体验
swift是一门类型安全的语言,同样也是基于c语言 那么c语言的一些类型也是实用的,不同的是:swift声明变量和常量是不一样的 let:用来修饰常量:var用来修饰变量 e.g: let num=1 ...
- [RxJava^Android]项目经验分享 --- RxLifecycle功能实现分析(二)
接着上一篇文章的内容,这篇文章一边分析RxLifecycle的实现原理,一边学习RxJava操作符. 首先RxLifecycle在基础类里定义BehaviorSubject并绑定Activity或 ...
- ThreadLocal对象使用过程中容易陷入的坑
ThreadLocal对象帮助我们管理线程内的对象,保证对象在线程之间是相互隔离的. 今天碰到的坑是这样的: index01.html页面加载的时候会发送一次a请求,然后点击附件上传的时候会发送上传请 ...