- A+
WPF控件继承自 System.Windows.Control 类。包括以下控件:
- 内容控件:可包含嵌套的元素。包括 Label,Button,ToolTip,ScrollViewer
- 带标题的内容控件:通常用于封装更大的用户界面块。包括 TabItem,GroupBox,Expander
- 文本控件:支持输入文本。包括 Textbox,PasswordBox,RickTextBox
- 列表控件:包括 ListBox,ComboBox
- 基于范围的控件:通常只有共同的属性 Value。包括Slider,ProgressBas
- 日期控件:包括 Calendar,DataPicker
内容控件
内容控件可包含并显示一块内容。与布局容器不同的是,只能包含一个子元素。内容控件都继承自抽象类 ContentControl .
Content属性
Content属性支持任何类型的对象,但可分为两大类:
- 未继承自 UIElement 类的对象: 调用这些控件的 ToString() 方法获取文本
- 继承自 UIElement 类的对象:使用 UIElement.OnRender() 方法进行显示
HorizontalContentAlignment,VerticalContentAlignment 以及 Padding 属性都是在 Control 类中定义,而非 ContentControl 类中定义,这是因为有些控件不是内容控件也需要包含某些类型的内容。
标签
Label 控件支持 记忆符(mnemonics)-能够为链接的控件设置焦点的快捷键。
<Label Target="{Binding ElementName=txtA}"> Choose _A</Label> <TextBox Name="txtA"/> <Label Target="{Binding ElementName=txtB}"> Choose _B</Label> <TextBox Name="txtB"></TextBox>
按钮
ButtonBase 定义了 Click 事件并添加了对命令的支持,添加了 ClickMode 属性。
Button
Button 添加了两个可写属性:
- IsCancel 设置为ture时,按钮就成为窗口的取消按钮,在任何位置按下 Esc键就会触发
- IsDefault 设置为true时,按钮就成为默认按钮
ToggleButton 和 RepeatButton
- GridViewColumnHeader 使用ListView时,该类表示一列可以单击的标题
- RepeatButton 只要按钮保持按下状态就不断触发
- ToggleButton 有两个状态的按钮
CheckBox
CheckBox 继承自 ToggleButton ,可以切换开关状态。
RadioButton
RadioButton 继承自ToggleButton,增加了 GroupName 属性进行分组。
并非一定使用 GroupBox 容器封装单选按钮,但通常约定如此,GourpBox控件显示一条边框和标题。
工具提示
WPF中工具提示是内容控件,可以放置任何可视化元素,可控制工具提示的显示和隐藏速度。
<Button ToolTip="This is my toolTip"> I have a tooltip </Button> <Button Content="I have a fancy tooltip"> <Button.ToolTip> <StackPanel> <TextBlock Margin="3"> Image and text</TextBlock> <Image Source="happy.jpg" Stretch="None"/> <TextBlock Margin="3">Image and text</TextBlock> </StackPanel> </Button.ToolTip> </Button>
特殊容器
内容控件不仅包括基本控件,如标签、按钮以及工具提示;还包括特殊容器,可用于构造用户界面比较大的部分区域。
ScrollViewer
为了获得滚动支持,需要在 ScrollViewer 控件中封装希望滚动的内容。
通过代码进行滚动
- LineUp() 和 LineDown() ,向上或向下滚动滚动一整屏。
- 用于水平滚动的类似方法,包括 LineLeft(),LineRight(),PageLeft(),PageRight()
- ScrollToXxx() 滚动到任何特定位置。ScrollToEnd() 和 ScrollToHome()可以滚动到内容的顶部和底部。ScrollToVerticalOffset() 可以滚动到特定位置。ScrollToLeftEnd(),ScrollToRightEnd(),ScrollToHorizontalOffset().
自定义滚动
- 在ScrollViewer中放置元素,是实现了 IScrollInfo 接口的任意元素
- 将ScrollViewer.CanContentScroll 设置为true
- ScrollViewer控件通过 IScrollInfo 接口来调用元素的方法
GroupBox
GroupBox 显示为具有圆角和标题的方框,仍需要布局容器来布置内容。GroupBox 经常使用对数量不多的相关控件进行分组,比如几个单选按钮。
TabItem
TabItem 表示TabControl控件中的一页。
与Content属性一样,Header属性可接受任何类型的对象。继承自 UIElement 的类通过渲染来显示,对于内联文本以及其他所有对象使用 ToString() 方法。
Expander
Expander 是具有标题的内容控件,封装了一块内容,通过单击小箭头按钮可显示或隐藏内容。在线帮助以及 Web 页面经常使用这种技术。
可以使用 ExpandDirection 设置为 Up,Left 或 Right
文本控件
PasswordBox 控件直接继承自Control类。TextBox和RichTextBox控件间接继承自 TextBoxBase 类。
多行文本
TextBox可以设置 MaxLength 来限制字符的数量。如果 TextWrapping=Wrap 是在控件的边缘换行;如果TextWrapping=WrapWithOverflow 允许拉伸某些行使其超出右边缘。
通过 VerticalScrollBarVisibility 设置为 Visible 或 Auto,添加始终显示或按需显示的滚动条。
选择文本
TextBox 还提供了使用 SelectionStart,SelectionLength 以及 SelectedText 属性来决定选择哪些文本或改变当前所选文本的能力。Undo 功能允许用户撤销最近的操作。
拼写检查
设置 TextBox 的 SpellCheck.IsEnabled 属性即可拼写检查。
列表控件
列表控件继承自 ItemsControl ,该类添加了所有基于列表的控件都使用的基本功能。
ListBox
ListBox 不仅可以包含ListBoxItem对象,也可以是其他任意元素。ListBoxItem继承自 ContentControl 类。
<ListBox> <ListBoxItem> <StackPanel Orientation="Horizontal"> <Label VerticalContentAlignment="Center">A happy face</Label> <Image Source="happy.jpg"/> </StackPanel> </ListBoxItem> </ListBox>
ListBox 能够隐式创建所需要的 ListBoxItem 对象。此时 SelectedItem 值是放到列表中的对象。
ComboBox
ComboBox控件包含 ComboBoxItem 对象,既可以显示地也可以隐士地创建该集合。设置 IsEditable = true,可以允许用户通过输入文本选择一项。
基于范围的控件
ScrollBar,ProgressBar,Slider 都继承自 RangeBase 类。这些控件用在特定最小值和最大值之间的数值。
属性 | 说明 |
---|---|
Value | 当前值,默认从0开始 |
Maximum | 最大值 |
Minimum | 最小值 |
SmallChange | Value属性为“小变化”向上或向下调整的数量。对于ScrollBar和Slider是使用箭头键时值改变的量 |
LargeChange | Value属性为“大变化”向上或向下调整的数量。对于ScrollBar和Slider是使用 PageUp和PageDown键或单击滑块两侧时值改变的量 |
Slider
音量控制时,背后的数字对于用户来说是没有意义的,是 Slider 典型的应用。
属性 | 说明 |
---|---|
Orientation | 竖直或水平 |
Delay Interval | 按下滑动条两侧时,移动速度 |
TickPlacement | 刻度显示的位置 |
TickFrequency | 设置刻度之间的间隔,决定了显示多少刻度 |
Ticks | 如果希望在特定不规则位置显示刻度,可使用 Ticks 集合 |
IsSnapToTickEnabled | 当移动滑块会自动跳转到最近的刻度标记 |
IsSelectionRangeEnabled | 可使用选择范围使滑块条的一部分显示阴影 |
ProgressBar
ProgressBar 控件只是长时间运行任务的进度,不能与用户交互,需要代码递增 Value 属性值。如果将 IsIndeterminate = true ,会周期性显示从左向右跳动的绿色脉冲,用于长时间运行或者不知道执行多少时间的情况。