控件分类
在第一篇文章
WPF App开发入门教程( 一、.Net Core/.NET和WPF介绍)
中的WPF的功能和特性部分根据功能性介绍了WPF的控件 名称。
在接下来的文章中,将会详细地介绍各个控件的概念及使用。
主要包括:
内容控件:Label、Button、CheckBox、ToggleButton、RadioButton、ToolTip和ScrollViewer
带有标题的内容控件:TabItem、GroupBox、Expander
导航控件:Frame、TabControl、Page
窗体控件:Window
文本控件:TextBox、PasswordBox、RichTextBox
列表控件:ListBox、ListView、DataGrid、ComboBox、TreeView和ToolBar
基于范围的控件:Slider和ProgressBar
日期控件:Calender和DatePicker
媒体控件:Image和MediaElement
轻量级控件:TextBlock
菜单:Menu、ContextMenu
浏览器控件:WebBrowser
文本控件
TextBox、PasswordBox、和RichTextBox都是文本控件。
虽然把这三个控件归到一个类别进行演示,实际他们继承的类并不相同。
TextBox和RichTextBox都继承自TextBoxBase,TextBoxBase是为文本编辑控件提供功能的抽象基类。
TextBox控件
TextBox是普通文本框控件,支持显示或编辑未设置格式的文本。相比于RichTextBox,TextBox占用的资源更少。

TextBox和RichTextBox对比
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
常用属性
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
设置文本框文本
通过TextBox.Text属性,可以设置/获取文本框的显示文本
多行显示
通过TextBox.TextWraping属性,可以设置文本框的换行方式,可选以下枚举值:
public enum TextWrapping{//如果行溢出可用块宽度,则将发生换行。 但是,如果换行算法不能确定换行时机,例如超长单词限制于固定宽度容器中而不允许滚动时,行会溢出块宽度。WrapWithOverflow = 0,//不执行换行。NoWrap = 1,//如果行溢出可用块宽度,即使标准换行算法不能确定换行时机,例如超长单词限制于固定宽度容器中而不允许滚动时,也将发生换行。Wrap = 2}
可以通过设置TextBox.MaxLines属性来设置文本框能显示的最多行数,在未指定TextBox高度的情况下,TextBox会显示为能显示MaxLines行数的高度。
<TextBox Width="200" HorizontalAlignment="Center" VerticalAlignment="Center" Text="One of the TextAlignment values that specifies the horizontal alignment of the contents of the text box. The default is Left." TextWrapping="WrapWithOverflow" MaxLines="3"></TextBox>
TextBox.MinLines属性可以设置最小显示行数。
TextBox.AcceptsReturn 属性设置为 true 会导致在按下 回车键时插入新行,如果需要,会再次自动扩展 TextBox 以包含新行的空间。
TextBox.VerticalScrollBarVisibility属性将滚动条添加到 TextBox,以便在 TextBox 扩展超出包围它的框架或窗口的大小时可以滚动 TextBox 的内容。
选择文本
通过TextBox.SelectionStart属性设置所选文本的开始位置、TextBox.SelectionLength设置所选文本的长度。
TextBox.SelectedText属性可以快速检查或改变在文本框中选中的文本。
例如我们在界面上放置一个按钮,当按钮点击时,设置SelectionStart = 0,SelectionLength = 13
<TextBox Margin="10" Width="200" Name="tbox1" HorizontalAlignment="Center" VerticalAlignment="Center" Text="One of the TextAlignment" TextWrapping="WrapWithOverflow" VerticalScrollBarVisibility="Auto" MaxLines="3" AcceptsReturn="True"></TextBox><Button Content="选中文本" Click="Button_Click"></Button>
private void Button_Click(object sender, RoutedEventArgs e){tbox1.Focus();tbox1.SelectionBrush = Brushes.Red;tbox1.SelectionStart = 0;tbox1.SelectionLength = 13;}
运行效果如下:
说明:
需要先设置文本框焦点,否则设置选中无效
TextBox.AutoWordSelection属性设置为true时,可以在拖动鼠标时自动选中整个单词。
TextBox.SelectionBrush属性可以设置文本选中时的画刷。
PasswordBox
PasswordBox是密码文本框,用于输入密码。它跟TextBox不同的是,输入的文本会变成圆圈符号,PasswordBox不支持剪贴板。
常用函数
|
|
|
|
|
|
|
|
|
|
|
|
常用属性
|
|
|
|
|
|
|
|
|
当密码更改时,会触发PasswordChanged事件。
在PasswordBox内部,使用的是System.Security.SecureString对象来存储密码,与普通文本类似,Security也是纯文本对象,但是是以加密方式在内存中保存。用于加密字符串的密钥是随机生成的,存储在一块从来不会写入到磁盘的内存中。
说明:
PasswordBox.Password属性是CLR属性,而非WPF的依赖属性,所以Password不支持绑定。在后面介绍MVVM及绑定时,会介绍如何实现PasswordBox.Password的绑定。
RichTextBox
RichTextBox是富文本框,它支持富文本(支持格式化文本(字体、颜色、段落)、图片、表格等复杂内容),使用WPF中的FlowDocument对象。
这里仅做简单介绍,在后面介绍WPF中的文档时,再进行详细介绍。
基础使用
<!-- 基础 RichTextBox --><RichTextBox x:Name="rtbMain" Margin="20"><!-- 初始内容:FlowDocument + Paragraph + Run --><FlowDocument><Paragraph FontSize="14" Foreground="Black"><Run Text="这是 RichTextBox 初始文本"/><Bold><Run Text="(加粗)"/></Bold><Italic><Run Text="(斜体)"/></Italic></Paragraph><Paragraph><Run Text="第二行文本,支持换行和段落间距"/></Paragraph><Paragraph><Image Source="c.jpg" Width="300"></Image></Paragraph></FlowDocument></RichTextBox>
运行效果
常用属性
|
|
|
|---|---|
IsReadOnly |
true 则禁止编辑)
|
AcceptsTab |
false)
|
VerticalScrollBarVisibility |
Auto/Visible/Hidden)
|
HorizontalScrollBarVisibility |
|
FontFamily/FontSize/FontWeight |
|
示例代码
https://github.com/zhaotianff/DotNetCoreWPF/tree/master/%E5%85%AB%E3%80%81WPF%E4%B8%AD%E7%9A%84%E5%B8%B8%E7%94%A8%E6%8E%A7%E4%BB%B6(%E4%B8%89)/WPF%E4%B8%AD%E7%9A%84%E5%B8%B8%E7%94%A8%E6%8E%A7%E4%BB%B6(%E4%B8%89)
参考资料:
https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.controls.primitives.textboxbase?view=windowsdesktop-8.0
https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.controls.listview?view=windowsdesktop-8.0
https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/controls/how-to-create-a-custom-view-mode-for-a-listview?view=netframeworkdesktop-4.8

