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

一开始我是直接继承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. Git小记

    Git简~介 Git是一个分布式版本控制系统,其他的版本控制系统我只用过SVN,但用的时间不长.大家都知道,分布式的好处多多,而且分布式已经包含了集中式的几乎所有功能.Linus创造Git的传奇经历就 ...

  2. 【HDU2896】病毒侵袭 AC自动机

    [HDU2896]病毒侵袭 Problem Description 当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋--我们能在有生之年看到500年 ...

  3. / fluxChatDemo / 系列 ——fluxDemoChat 组件编写

    还是用各部分来表示过程吧,没文采,就先这样记着吧 嘻嘻 梳理问题: 编写es6风格的组件时,需要引入import React from ‘react’ 然后页面就华丽丽的展示出了我写的1.2两个字 在 ...

  4. USER STORIES AND USE CASES - DON’T USE BOTH

    We’re in Orlando for a working session as part of the Core Team building BABOK V3 and over dinner th ...

  5. python基础之day2

    python基本数据类型 1.数字 int(整型)      在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647  在64位系统 ...

  6. Python之路第一课Day9--随堂笔记之二(进程、线程、协程篇)

    本节内容 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queu ...

  7. POJ1860 Currency Exchange(bellman-ford)

    链接:http://poj.org/problem?id=1860 Currency Exchange Description Several currency exchange points are ...

  8. MYSQL MHA

    MYSQL MHA 简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于 Face ...

  9. SharePoint 2010中一些必须知道的限制

    最大文件名长度是123个字符. 一个文档库(library)里最多可以存放10000个文档 一个视图(view)里最多显示5000个条目(item) 推荐的单个内容数据库(content databa ...

  10. MySQL的特点

    MySQL的特点 CPU特点 内存特点 磁盘特点 分析