系列文章链接

文本控件

WPF提供了3种用于输入的文本控件:TextBox、RichTextBox和PasswordBox。前两种继承自TextBoxBase类,最后一个继承自Control类。文本框能够包含的内容类型是有限的。TextBox控件总是存储字符串(Text属性),PasswordBox控件也处理字符串内容(Password属性)。只有RichTextBox控件可以存储更复杂的内容(可包含复杂元素组合的FlowDocument对象)

多行文本

TextBox控件通常存储单行文本(可以通过设置MaxLength属性来限制字符的数量)。有些情况下需要处理大量内容,也就要使用多行文本框。TextWrapping属性设置为Wrap或者WrapWithOverflow,如果是前者,总是会在控件的边缘换行,甚至将一个特别长的单词放在两行中。如果是后者,换行算法在没有发现合适的位置(空格或者连字符)进行换行,就允许拉伸某些行使其超出右边缘。

为了能自动在文本框中看到多行文本,需将其尺寸设置的足够大。不应该设置硬编码的高度(这样不能适应不同的字体大小,而且可能导致布局问题),可使用方便的MinLines和MaxLines属性,分别设置文本框中必须显示的最小行数和能够显示的最大行数。

如果文本框支持换行,用户可输入更多能够立即在可视行中显示的文本。因此通过将VerticalScrollBarVisibility属性设置为Visible或者Auto,添加始终显示或按需显示的滚动条是有意义的。如果允许在用户在多行文本框中通过Enter输入回车,需要将AcceptsReturn属性设置为true。也可以通过设置AcceptsTabs属性,允许用户输入Tab键。TextBox还提供了几个方法,通过这些方法可使用代码以较小或者较大的步长在文本内容中移动。LineUp,LineDown,PageUp,PageDown,ScrollToHome,ScrollToEnd,ScrollToLine。

如果是为了显示文本的文本框,这时可以使用IsReadOnly属性设置为true以阻止编辑文本。最好通过IsEnabled属性设置为false来禁用文本框,会显示灰色的文本,不支持文本选择和复制,滚动。

选择文本

任何文本框都可以通过鼠标单击并拖动鼠标,或者按住shift键并使用方向键在文本中移动来选择文本。TextBox类还提供了使用SelectionStart、SelectionLength以及SelectedText属性,通过编程决定选择哪些文本或改变当前所选文本的能力。

SelectionStart属性确定所选文本的开始位置,该位置从0开始。SelectionLength属性指示选中的字符的总数量,0表示未选中字符。SelectedText属性可快速检查或者改变在文本框中选中的文本。可以通过处理SelectionChanged事件对文本选择变化加以响应。还提供了控制文本选择行为的属性AutoWorldSelection,如果为true,那么当在文本中拖动鼠标时文本框每次会选择整个单词。

文本框有Undo功能,允许用户撤销最近的操作。只要未将CanUndo属性设置为false,就可以通过代码获取Undo功能,调用此方法,并使用Ctrl+Z快捷键。

TextBox还支持拼写检查,只需要将SpellCheck.IsEnabled依赖项属性设置为true即可。目前只局限于4中语言:英语、法语、德语、西班牙语。可通过TextBox控件的Language属性重写默认设置,拼写检查根据键盘配置的输入语言来决定使用哪个词典。

PasswordBox

和TextBox类似,但是通过显示圆圈符号字符串来屏蔽实际字符(可以通过设置PasswordChar属性选择不同的屏蔽字符),不支持剪切板,不能复制内部文本。

提供了MaxLength属性,Clear(), Paste(), SelectAll() 方法,文本发生变化时触发PasswordChanged时间。

列表控件

主要包含ListBox、ComboBox,以及ListView、TreeView、ToolBar控件。这些控件都继承自ItemsControl类。ItemsControl类添加了所有基于列表的控件都是用的基本功能。最显著的是,提供了填充列表的两种方式。最直接的办法是使用代码或者XAML将列表项直接添加到Items集合中。使用数据绑定的形式,需要将ItemsSource属性设置为希望显示的具有数据项集合的对象。

ItemsControl类之后继承有一些混乱,一个主要分支是选择器Selector,包括ListBox、ComboBox以及TabControl,这些控件都继承自Selector类,都具有跟踪当前选择项SelectItem或者选择位置SelectIndex的属性。另一个分支以不同方式选择列表项,主要包括菜单、工具栏、树。

ListBox

ListBox代表了最常用的列表项,允许用户选择其中一项。可以通过SelectionMode属性设置选择模式,Multiple(通过单击项进行选择或者取消选择)、Extended(需要按下Ctrl键选择其他项,或者按下Shift键选择某个范围)、Single(默认单选),可以通过SelectedItems集合或者SelectedItem属性来获取所有选择项。

ListBox是一个非常灵活的控件,它不仅包含ListBoxItem对象,也可以驻留其他任意元素,因为ListBoxItem类继承自ContentControl类,能够嵌套内容。ListBoxItem对象会调用ToString方法并显示最终的文本。

ComboBox

ComboBox控件和ListBox控件类似,该控件包含ComboBoxItem对象的集合,既可以显式地也可以隐式地创建该集合。ComboBox也可以嵌套任何元素的内容控件。ComboBox控件使用下拉列表,一次只能选择一项。

如果希望允许用户在组合框中通过输入文本选择一项,就必须将IsEditable属性设置为true,并且比偶徐确保选项集合中存储的是普通的纯文本的ComboBoxItem对象,或是提供有意义的ToString表示的对象。

ComboBox控件的局限之一在于当使用自动改变尺寸功能时该控件改变自身尺寸的方式。该控件加宽自身以适应它的内容,这意味着当从一项移动到另一项时它会改变自身大小,但没有简便的方法告诉ComboBox控件使用所包含项的最大尺寸。

WPF进阶技巧和实战03-控件(3-文本控件及列表控件)的更多相关文章

  1. WPF进阶技巧和实战03-控件(4-基于范围的控件及日期控件)

    系列文章链接 WPF进阶技巧和实战01-小技巧 WPF进阶技巧和实战02-布局 WPF进阶技巧和实战03-控件(1-控件及内容控件) WPF进阶技巧和实战03-控件(2-特殊容器) WPF进阶技巧和实 ...

  2. WPF进阶技巧和实战03-控件(1-控件及内容控件)

    所有控件都继承自System.Windows.Controls.Control类,这个类添加一些基本结构: 设置控件内容对齐方式 (HorizontalContentAlignment,Vertica ...

  3. WPF进阶技巧和实战06-控件模板

    逻辑树和可视化树 System.Windows.LogicalTreeHelper System.Windows.Media.VisualTreeHelper 逻辑树类(LogicalTreeHelp ...

  4. WPF进阶技巧和实战03-控件(5-列表、树、网格02)

    数据模板 样式提供了基本的格式化能力,但是不管如何修改ListBoxItem,他都不能够展示功能更强大的元素组合,因为了每个ListBoxItem只支持单个绑定字段(通过DisplayMemberPa ...

  5. WPF进阶技巧和实战03-控件(5-列表、树、网格01)

    列表控件 ItemsControl为列表项控件定义了基本功能,下图是ItemsControl的继承关系: 在继承自ItemsControl类的层次结构中,还显示了项封装器(MenuItem.TreeV ...

  6. WPF进阶技巧和实战08-依赖属性与绑定03

    数据提供者 在大多数的代码中,都是通过设置元素的DataContext属性或者列表控件的ItemsSource属性,从而提供顶级的数据源.当数据对象是通过另一个类构造时,可以有其他选择. 一种是作为窗 ...

  7. WPF进阶技巧和实战09-事件(1-路由事件、鼠标键盘输入)

    理解路由事件 当有意义的事情发生时,有对象(WPF的元素)发送的用于通知代码的消息,就是事件的核心思想.WPF通过事件路由的概念增强了.NET事件模型.事件由允许源自某个元素的事件由另一个元素引发.例 ...

  8. WPF进阶技巧和实战03-控件(5-列表、树、网格04)

    ListView控件 ListView继承自简单的没有特色的ListBox,增加了对基于列显示的支持,并增加了快速切换视图或显示模式的能力,而不需要重新绑定数据以重新构建列表. ListView类继承 ...

  9. WPF进阶技巧和实战08-依赖属性与绑定02

    将元素绑定在一起 数据绑定最简单的形式是:源对象是WPF元素而且源属性是依赖项属性.依赖项属性内置了更改通知支持,当源对象中改变依赖项属性时,会立即更新目标对象的绑定属性. 元素绑定到元素也是经常使用 ...

随机推荐

  1. composer出现问题: Could not open input file: composer.phar

    可以执行下面命令 php -r "readfile('https://getcomposer.org/installer');" | php This will install c ...

  2. Linux系列(27) - 三剑客grep、awk、sed

    Linux下一切皆文件,对Linux的操作就是对文件的处理 Linux中最重要的三个命令在业界被称为"三剑客",它们是awk,sed,grep 正则表达式就好比一个模版,这个模板就 ...

  3. Django边学边记——中间件

    特点 Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,用于全局修改Django的输入或输出. 每个中间件组件负责做一些特定的功能.中间件全部注册在sett ...

  4. Django边学边记—视图

    一. url (一)配置 在项目/settings.py中通过ROOT_URLCONF指定url配置 ROOT_URLCONF = 'XXXX.urls' 打开 项目/urls.py 配置 (二)语法 ...

  5. yum 安装 php 环境

    如此简单 第一步: sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7. ...

  6. 低差异序列 (low-discrepancy sequences)之Hammerysley在半球中采样点方法的介绍

    半球上的Hammersley 源作者:Holger Dammertz 一组关于如何在2D中使用Hammersley点集以在着色器程序中快速实用地生成半球方向的笔记.如果你发现任何错误或有意见,不要犹豫 ...

  7. 鸿蒙内核源码分析(静态站点篇) | 五一哪也没去就干了这事 | 百篇博客分析OpenHarmony源码 | v52.02

    百篇博客系列篇.本篇为: v52.xx 鸿蒙内核源码分析(静态站点篇) | 五一哪也没去就干了这事 | 51.c.h.o 前因后果相关篇为: v08.xx 鸿蒙内核源码分析(总目录) | 百万汉字注解 ...

  8. Java-爬虫-小项目

    爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 项目地址:https://gitee.com/zwtgit/java-reptile 导入依赖,写一个工具类 <depend ...

  9. WCF服务调用超时错误:套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的。本地套接字超时是“00:05:30”(已解决)

    问题: 线上正式环境调用WCF服务正常,但是每次使用本地测试环境调用WCF服务时长就是出现:套接字连接已中止.这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的.本地套接字超 ...

  10. Java基础之(六):变量、运算符与JavaDoc

    变量.常量 一.变量的命名规范 首字母只能以字母(A-Z或者a-z)或者美元符($)或者下划线(_)开头,不能以数字开头,首字母之后只能跟字母(AZ或者az)或者数字,不能跟美元符或者下划线 源码 p ...