WPF进阶技巧和实战03-控件(3-文本控件及列表控件)
系列文章链接
- WPF进阶技巧和实战01-小技巧
- WPF进阶技巧和实战02-布局
- WPF进阶技巧和实战03-控件(1-控件及内容控件)
- WPF进阶技巧和实战03-控件(2-特殊容器)
- WPF进阶技巧和实战03-控件(3-文本控件及列表控件)
- WPF进阶技巧和实战03-控件(5-列表、树、网格01)
- WPF进阶技巧和实战03-控件(5-列表、树、网格02)
- WPF进阶技巧和实战03-控件(5-列表、树、网格03)
- WPF进阶技巧和实战03-控件(5-列表、树、网格04)
- WPF进阶技巧和实战04-资源
- WPF进阶技巧和实战05-样式与行为
- WPF进阶技巧和实战06-控件模板
- WPF进阶技巧和实战07--自定义元素01
- WPF进阶技巧和实战07--自定义元素02
- WPF进阶技巧和实战08-依赖属性与绑定01
- WPF进阶技巧和实战08-依赖属性与绑定02
- WPF进阶技巧和实战08-依赖属性与绑定03
文本控件
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-文本控件及列表控件)的更多相关文章
- WPF进阶技巧和实战03-控件(4-基于范围的控件及日期控件)
系列文章链接 WPF进阶技巧和实战01-小技巧 WPF进阶技巧和实战02-布局 WPF进阶技巧和实战03-控件(1-控件及内容控件) WPF进阶技巧和实战03-控件(2-特殊容器) WPF进阶技巧和实 ...
- WPF进阶技巧和实战03-控件(1-控件及内容控件)
所有控件都继承自System.Windows.Controls.Control类,这个类添加一些基本结构: 设置控件内容对齐方式 (HorizontalContentAlignment,Vertica ...
- WPF进阶技巧和实战06-控件模板
逻辑树和可视化树 System.Windows.LogicalTreeHelper System.Windows.Media.VisualTreeHelper 逻辑树类(LogicalTreeHelp ...
- WPF进阶技巧和实战03-控件(5-列表、树、网格02)
数据模板 样式提供了基本的格式化能力,但是不管如何修改ListBoxItem,他都不能够展示功能更强大的元素组合,因为了每个ListBoxItem只支持单个绑定字段(通过DisplayMemberPa ...
- WPF进阶技巧和实战03-控件(5-列表、树、网格01)
列表控件 ItemsControl为列表项控件定义了基本功能,下图是ItemsControl的继承关系: 在继承自ItemsControl类的层次结构中,还显示了项封装器(MenuItem.TreeV ...
- WPF进阶技巧和实战08-依赖属性与绑定03
数据提供者 在大多数的代码中,都是通过设置元素的DataContext属性或者列表控件的ItemsSource属性,从而提供顶级的数据源.当数据对象是通过另一个类构造时,可以有其他选择. 一种是作为窗 ...
- WPF进阶技巧和实战09-事件(1-路由事件、鼠标键盘输入)
理解路由事件 当有意义的事情发生时,有对象(WPF的元素)发送的用于通知代码的消息,就是事件的核心思想.WPF通过事件路由的概念增强了.NET事件模型.事件由允许源自某个元素的事件由另一个元素引发.例 ...
- WPF进阶技巧和实战03-控件(5-列表、树、网格04)
ListView控件 ListView继承自简单的没有特色的ListBox,增加了对基于列显示的支持,并增加了快速切换视图或显示模式的能力,而不需要重新绑定数据以重新构建列表. ListView类继承 ...
- WPF进阶技巧和实战08-依赖属性与绑定02
将元素绑定在一起 数据绑定最简单的形式是:源对象是WPF元素而且源属性是依赖项属性.依赖项属性内置了更改通知支持,当源对象中改变依赖项属性时,会立即更新目标对象的绑定属性. 元素绑定到元素也是经常使用 ...
随机推荐
- 基于swoole框架hyperf开发的纯API接口化的后台RBAC管理工具hyperfly@v1.0.0发布
hyperfly@v1.0.0发布 本文地址http://yangjianyong.cn/?p=323转载无需经过作者本人授权 github地址:https://github.com/vankour/ ...
- linux centos windows服务器修改数据库最大连接数的方法
1.可查询数据库最大连接数 show variables like '%max_connections%'; 2.修改数据库最大连接数,最大限制上限为16384. 找到数据库配置文件my.cnf,在配 ...
- Java基础(六)——集合
一.概述 1.介绍 为什么出现集合? 答:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,对对象进行存储,集合就是存储对象最常用的一种方式. 数组和集合类同是容器,有何不同? ...
- Oracle Haip无法启动问题学习
一.目标:Oracle Haip 启动报错 需求:日常运维过程中,已经遇到两次由于HAIP引发的问题,特此进行记录. 本次问题是看着大佬-李海清操作,整完了记录一下,上一次HAIP折腾了4个小时. O ...
- 记一次某网站生产环境CPU忽高忽低故障解决过程
感谢 感谢[一级码农] 的帮助,之前也读了大佬的好多文章,一直在学习中,也没有实际操作过. 这次的过程也是在大佬的指点下完成的. 现象描述 从周六上午开始,陆续收到服务器CPU高的报警短信,到下午已经 ...
- 如何实现Web视频聊天?
在网页里实现文字聊天是比较容易的,但若要实现视频聊天,就比较麻烦了.这里,我们将实现一个简单的网页版视频聊天Demo,可以支持所有类型的浏览器. 本Demo除了视频聊天功能外,还包含以下功能: 1.上 ...
- P4770-[NOI2018]你的名字【SAM,线段树合并】
正题 题目链接:https://www.luogu.com.cn/problem/P4770 题目大意 给出一个长度为\(n\)的字符串\(S\).\(q\)次询问给出一个串\(T\)和一个区间\([ ...
- .Net Core 实现 自定义Http的Range输出实现断点续传或者分段下载
一.Http的Range请求头,结合相应头Accept-Ranges.Content-Range 可以实现如下功能: 1.断点续传.用于下载文件被中断后,继续下载. 2.大文件指定区块下载,如视频.音 ...
- 关于django配置好静态文件后打开相关图片页显示404的解决方法
在url里设置以上代码即可,即可解决图片显示异常(出现此问题的根本原因是django版本)django3后需要加以上代码)
- DRF的action装饰器
1.action装饰器 Django默认的路由分发规则决定了视图函数只能以get.post等请求方式命名,如果想要使用自定义的方式命名,我们可以使用action去映射请求方法名与自定义方法 view. ...