Ch07 用户交互控件
控件分为三大类:
- 内容控件
- 布局控件
- 用户交互控件
控件一般用于向用户展示数据信息. 用户交互控件目的是让用户输入数据.
控件概览
本章会介绍到的控件
控件 | 描述 |
---|---|
Button | 让用户点击, 告知程序要做什么. |
CheckBox | 让用户选择, 或取消非排他选项. |
ComboBox | 让用户从下拉中选择一个. |
ContextMenu | 根据不同控件展示弹出菜单. |
Frame | 展示 Web 或 XAML 内容, 并提供简单的导航. |
GridSplitter | 让用户可以在 Grid 中调整行或列. |
ListBox | 展示一组数据, 根据控件的配置允许用户选择其中一个或多个. |
Menu | 展示菜单. |
PasswordBox | 密码框. |
RadioButton | 一组排他选项供用户选择. |
RepeatButton | 只要用户将鼠标按在其上, 就允许重复触发 Click 事件. |
ReachTextBox | 允许用户输入带有格式的文本. |
ScrollBar | 让用户在一个范围内选择一个数字, 一般该值用与确定图形上的问题. 例如选择一个大图的显示区域等. |
Slider | 在一个范围内选择一个数值. |
TextBox | 文本框. |
BUTTON
常用属性有:
Content
x:Name
Width
Height
Margin
Click
jk:
Content
的尺寸似乎会被压缩, 默认会按照最小的方式给出, 如果内容是其他组件, 需要手动设置Width
和Height
将其撑起来.
<Button Content="按钮"
x:Name="btn"
Click="btn_Click"/>
CHECKBOX
CheckBox
具有三态: 选中 (true
), 未选中 (false
), 未知 (null
).
常用属性:
Content
描述显示的文字x:Name
IsChecked
, 如果是未知, XAML 的语法为IsChecked="{x:Null}"
IsThreeStatus
,bool
类型
常用事件: Checked
和 UnChecked
.
jk: 调整文本尺寸的会后, 文字的大小会变化, 但是前置的复选框不会变.
COMBOBOX
ComboBox
允许用户从一组下拉列表中选中一个项. 每一个选项会被放在 ComboBoxItem
中, 它是一个单元素组件.
简单用法:
<ComboBox Width="300" Height="30" fontSize="16">
<ComboBoxItem Content="第一项"/>
<ComboBoxItem Content="第二项"/>
<ComboBoxItem Content="第三项"/>
</ComboBox>
常用属性:
属性 | 含义 |
---|---|
Background | 设置控件的背景, 需要注意的时是 ComboBoxItem 也有 Background 属性. |
IsEditable | 是否允许用户输入数据. 输入的数据从 Text 属性中获取. |
MaxDropdownHeight | 下拉框最高高度. |
SelectedIndex | 选中项的索引. 如果没有选中数据, 则为 -1 . |
SelectedItem | 选中项, 如果是输入, 则该属性为 null . |
CONTEXTMENU
上下文菜单. 基本用法:
- 构建菜单结构 (
ContentMenu
包含MenuItem
), 设置Header
来控制菜单上的显示. - 给需要上下文菜单的控件提供
ContextMenu
属性, 该其中设置菜单. - 子菜单用
MenuItem
包含MenuItem
. - 菜单选择使用
Click
事件来注册.
ContentMenu
对象是一种Menu
对象.
FRAME
Frame
控件展示内容, 并提供简单导航. 它可以展示 web 页面或 XAML 文件, 并遵循这些文件中的链接.
控件的 Source
属性指向页面地址, 或需要展示控件的 XAML 文件. 也可以调用控件的 Navigate
方法, 来展示新页面.
Web 显示简单的页面还行, 最含有 js 等代码的页面就不好了.
在页面的导航过程中, 也会记录其历史.
GRIDSPLITTER
用于在 Grid
中调整行的高度, 列的宽度.
将该控件嵌入到 Grid
中的特定列或行中. 实际上就是定义一个很细的行或列, 放置该控件.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="10"/>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<GridSplitter
Grid.Column="1"
Grid.Row="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="LightCyan"
ShowsPreview="True"
/>
<Label Grid.Row="0" Grid.Column="0" Background="Pink"/>
<Label Grid.Row="0" Grid.Column="2" Background="LightBlue"/>
</Grid>
必要时设置 Width
或 Height
, 方便选中进行拖动.
ShowsPreview
表示是否实时调整尺寸, 设置为 true
, 拖拽过程中会显示一个灰色的条, 表示拖拽后的条, 释放选中后才会调整区域大小.
LISTBOX
展示一个列表, 允许单选和多选. SelectionMode
为选择模式:
Single
单选Multiple
多选Extended
支持多选, 结合Ctrl
或Shift
和单击来选择.
ListBox
作为容器, ListBoxItem
来显示项. ListBoxItem
为单子节点.
MENU
Menu
用于展示菜单. 菜单容器使用 Menu
控件, 菜单项使用 MenuItem
, 子菜单使用 MenuItem
嵌套 MenuItem
构成. 菜单上的文字使用 Header
属性, 选中菜单使用 Click
事件.
要实现快速访问, 在文案前使用下划线. 给菜单的 InputGestureText
属性设置快捷键
一些高级内容需要结合命令来完成.
PASSWORDBOX
用于密码输入, 常用属性
Password
, 用于获取用户输入内容PasswordChar
掩码
RADIOBUTTON
排他选择. 使用容器进行分组. 基本用法与 CheckBox
类似. 但一定需要一个容器.
REPEATBUTTON
jk: 用于快速触发事件.
常用属性: Delay
默认 500
表示延迟多少执行. Interval
默认 33
, 表示后续事件触发的时间间隔.
RICHTEXTBOX [暂略]
富文本框, 用于显示带有格式的文本, 列表, 段落, 等等. 甚至可以嵌入按钮等.
直接使用 XAML 布局 RichTextBox
是比较困难的. RichTextBox
的 Document
属性用来包含其内容. Document
应该是一个 FlowDocument
, 里面可以包含 Paragraph
和 Table
等.
一个创建示例:
<RichTextBox >
<FlowDocument>
<Paragraph>
<Run>一段文字</Run>
</Paragraph>
</FlowDocument>
</RichTextBox>
第21章会介绍 文档.
RichTextBox
非常复杂, 它含有很多属性与方法来控制其行为, 以及对内容的格式化操作. 下面会介绍其常用的部分, 完成信息还需要参考文档.
编辑命令
文本框自带格式化快捷键, 例如加粗使用 ctrl
+ B. 也可以利用代码来实现:
EditingCommands.ToggleNumbering.Execute(null, 控件引用名);
亦或使用上下文菜单.
<MenuItem
Name="mnuParaAlignLeft"
Header="_Left"
Command="EditingCommands.AlignLeft" />
可用命令:
命令名 | 快捷键 |
---|---|
AlignCenter | Ctrl + E |
AlignJustify | Ctrl + J |
AlignLeft | Ctrl + L |
AlignRight | Ctrl + R |
EnterParagraphBreak | Enter |
ToggleBold | Ctrl + B |
ToggleItalic | Ctrl + I |
ToggleBullets | Ctrl + L |
ToggleNumbering | Ctrl + N |
ToggleUnderline | Ctrl + U |
详细命令可参考文档.
拼写检查
SpellCheck.IsEnabled = "True"
重做与撤销
Ctrl
+Z 和 Ctrl
+ Y
也可以调用方法: Undo()
或 ReDo()
.
有属性 CanUndo
和 CanRedo
可进行判断.
其他特性
属性 | 含义 |
---|---|
AcceptsReturn | 确定[Enter]键击是放置在控件的内容中, 还是发送到窗口. 逻辑主要是在表单控制中, 回车是否被视为文本, 还是触提交. |
AcceptsTab | |
HorizontalScrollBarVisibility | |
VerticalScrollBarVisibility | |
IsEnabled | |
IsReadOnly |
SCROLLBAR
一般结合 ScrollViewer
等使用, 但也可以当做在一个范围内取值的控件来使用.
常用属性
Orientation
, 可取值:Vertical
或Horizontal
.Maximum
Minimum
Value
LargeChange
拖动滚动调试每次改变值的大小SmallChange
点击箭头时每次改变值的大小
SLIDER
用于在范围内选择数据, 与前一个 ScrollBar
的取值功能逻辑上一样. 但是在外观上, 它可以有刻度.
与刻度有关的属性:
属性 | 含义 |
---|---|
IsSnapToTickEnabled | 设置为 true 时, 控件会将值锁定在附近的刻度处. |
IsSelectionRangeEnabled | 是否允许选择范围. |
TickFrequency | 描述两个刻度间的间隔. |
TickPlacement | 控制显示位置. |
Ticks | 刻度. |
背景色是白的时候, 看不出来刻度.
TEXTBOX
TextBox
就是单一文本框控件, 只允许使用一种统一的字体, 字号, 与颜色. 不同于 RichTextBox
可以进行调整, 使用不同的样式.
其特殊功能与
RichTextbox
一样.