系列文章链接

文本控件

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. vijos题解

    Vijos题解 题库地址:https://vijos.org/p P1001 谁拿了最多奖学金 题意:按照指定要求计算奖学金,直接用if判断即可 #include<iostream> us ...

  2. python语言介绍及安装

    Python语言简介 Python是什么语言 Python是一种解释型的.可移植的.开源的脚本. 什么是计算机编程 计算机程序:为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合 如何 ...

  3. Apache Dolphin Scheduler - Docker Compose 详解

    Apache DolphinScheduler 是一个分布式去中心化,易扩展的可视化 DAG 工作流任务调度系统.简称 DS,包括 Web 及若干服务,它依赖 PostgreSQL 和 Zookeep ...

  4. (转载https://segmentfault.com/a/1190000016313947)了解RestFul Api架构风格设计

    最近几年REST API越来越流行,特别是随着微服务的概念被广泛接受和应用,很多Web Service都使用了REST API. REST是HTTP规范主要编写者之一的Roy Fielding提出的, ...

  5. php 的一些问题

    ------------------------------------------------------------------------------ * 绝对路径转化为相对路径 <?ph ...

  6. Charles安装https证书

    Charles抓取https的包,出现unknow,需要安装https证书.

  7. 鸿蒙内核源码分析(进程通讯篇) | 九种进程间通讯方式速揽 | 百篇博客分析OpenHarmony源码 | v28.03

    百篇博客系列篇.本篇为: v28.xx 鸿蒙内核源码分析(进程通讯篇) | 九种进程间通讯方式速揽 | 51.c.h .o 进程通讯相关篇为: v26.xx 鸿蒙内核源码分析(自旋锁篇) | 自旋锁当 ...

  8. P4630-[APIO2018]Duathlon铁人两项【圆方树】

    正题 题目链接:https://www.luogu.com.cn/problem/P4630 题目大意 \(n\)个点\(m\)条边的一张无向图,求有多少对三元组\((s,c,f)\)满足\(s\ne ...

  9. 什么?你还不明白自动化的POM设计模式?

    POM简介.POM优势.如何设计POM POM简介 Page Object Model (POM) 直译为"页面对象模型",这种设计模式旨在为每个待测试的页面创建一个页面对象(cl ...

  10. 国庆出游神器:魔幻黑科技换天造物,让vlog秒变科幻大片!

    摘要:国庆旅游景点人太多,拍出来的照片全是人人人.车车车,该怎么办?不妨试试这个黑科技,让你的出游vlog秒变科幻大片. 本文分享自华为云社区<国庆出游神器,魔幻黑科技换天造物,让vlog秒变科 ...