WPF常用控件
1 布局控件
Canvas、DockPanel、Grid、StackPanel、TabPanel、ToolBarOverflowPanel、ToolBarPanel、 UniformGrid、VirtualizingPanel、VirtualizingStackPanel 和 WrapPanel 都是 WPF 中的布局控件,它们都继承自 Panel 类,可以容纳多个子控件或者嵌套其他布局控件,用于在 UI 中组织和排列控件。它们的作用和常用特征及特征值如下:
Canvas:画布,可以使用以像素为单位的绝对坐标来定位子控件,类似于 Windows Form 的布局方式。常用的特征有:
- Canvas.Left:指定子控件相对于画布左边缘的距离,可以是具体的数值或者 Binding 表达式。
- Canvas.Top:指定子控件相对于画布上边缘的距离,同上。
- Canvas.ZIndex:指定子控件在画布中的层次顺序,数值越大越靠上。
DockPanel:泊靠式面板,可以将子控件按照指定的方向停靠在父容器的边缘,类似于 Winform 中设置控件的 Dock 属性。常用的特征有:
- DockPanel.Dock:指定子控件停靠在父容器的哪一边,可以是 Left(左)、 Right(右)、Top(上)、Bottom(下)或None(不停靠)。
- DockPanel.LastChildFill:指定是否让最后一个子控件填充剩余空间,默认为 True。
Grid:网格,可以自定义行和列,并通过行列的数量、行高列宽来调整子控件的布 局,近似于 HTML 中的 table。常用的特征有:
- Grid.RowDefinitions:定义网格的行集合,每个 RowDefinition 可以指定 Height 属性为具体的数值、比例值(*)或 Auto(自适应内容高度)。
- Grid.ColumnDefinitions:定义网格的列集合,每个 ColumnDefinition 可以指定 Width 属性为具体的数值、比例值(*)或Auto(自适应内容宽度)。
- Grid.Row:指定子控件所在的行索引,从0开始。
- Grid.Column:指定子控件所在的列索引,从0开始。
- Grid.RowSpan:指定子控件横跨几行,默认为1。
- Grid.ColumnSpan:指定子控件纵跨几列,默认为1。
StackPanel:栈式面板,可以将子控件按照水平或垂直方向进行排列。常用的特征有:
- StackPanel.Orientation:指定子控件的排列方向,可以是 Horizontal(水平) 或Vertical(垂直)。
TabPanel:选项卡面板,可以将子控件按照选项卡的形式进行排列。常用的特征有:
- TabPanel.IsSharedSizeScope:指定是否共享同一组尺寸范围,默认为 False。
ToolBarOverflowPanel:工具栏溢出面板,可以将工具栏中多余的子控件放入一个下 拉菜单中。常用的特征有:
- ToolBarOverflowPanel.WrapWidth:指定工具栏溢出面板中每一行的最大宽 度,默认为无穷大。
ToolBarPanel:工具栏面板,可以将工具栏中的子控件按照水平或垂直方向进行排列, 并自动换行。常用的特征有:
- ToolBarPanel.Orientation:指定工具栏面板中子控件的排列方向,可以是 Horizontal(水平)或 Vertical(垂直)。
UniformGrid:均匀网格,可以将子控件按照相同大小和间距进行排列。常用的特征 有:
- UniformGrid.Rows:指定均匀网格的行数,默认为 1。
- UniformGrid.Columns:指定均匀网格的列数,默认为无穷大。
VirtualizingPanel:虚拟化面板,是一个抽象类,可以提供子控件的虚拟化功能,即 只创建可见的子控件,从而提高性能。常用的特征有:
- VirtualizingPanel.IsVirtualizing:指定是否启用虚拟化功能,默认为 True。
- VirtualizingPanel.VirtualizationMode:指定虚拟化的模式,可以是 Standard(标 准)或 Recycling(回收)。
VirtualizingStackPanel:虚拟化栈式面板,继承自 VirtualizingPanel,可以将子控件按 照水平或垂直方向进行排列,并提供虚拟化功能。常用的特征有:
- VirtualizingStackPanel.Orientation:指定子控件的排列方向,可以是 Horizontal (水平)或Vertical(垂直)。
WrapPanel:自动换行面板,可以将子控件按照水平或垂直方向进行排列,并在排满 一行或一列后自动换行或换列。常用的特征有:
- WrapPanel.Orientation:指定子控件的排列方向,可以是 Horizontal(水平) 或Vertical(垂直)。
- WrapPanel.ItemHeight:指定子控件的高度,默认为 Auto(自适应内容高度)。
- WrapPanel.ItemWidth:指定子控件的宽度,默认为 Auto(自适应内容宽度)。
2 内容控件
BaseButton、Button、ToggleButton、CheckBox、ComboBoxItem、Frame、GridViewColumnHeader、 GroupItem、Label、ListBoxItem、ListViewItem、NavigationWindow、PasswordBox、RadioButton、 RepeatButton、StatusBarItem、ScrollViewer、ToolTip、UserControl 和 Window 都是 WPF 中的内容控件,它们都继承自 ContentControl 类,可以包含一个任意对象作为它们的内容。它 们的作用和常用特征及特征值如下:
BaseButton:按钮基类,是一个抽象类,不能直接使用,提供了按钮的基本功能和属 性,如 Click 事件和 IsPressed 属性。继承自 BaseButton的控件有 Button、ToggleButton、 CheckBox 和 RadioButton 等。
Button:按钮,可以显示文本或图像,并在用户单击时触发 Click 事件。常用的特征 有:
- Content:指定按钮的内容,可以是任意对象。
- IsDefault:指定按钮是否是默认按钮,如果为 True,则在用户按下回车键时触发 Click 事件,默认为 False。
- IsCancel:指定按钮是否是取消按钮,如果为 True,则在用户按下Esc 键时 触发 Click 事件,默认为 False。
ToggleButton:切换按钮,可以显示文本或图像,并在用户单击时切换其 IsChecked 属性的值。常用的特征有:
- Content:指定切换按钮的内容,可以是任意对象。
- IsChecked:指定切换按钮是否被选中,可以是 True(选中)、False(未选中) 或Null(不确定),默认为False。
- IsThreeState:指定切换按钮是否支持三种状态,如果为 True,则IsChecked 属性可以为 Null,否则只能为 True 或 False,默认为False。
CheckBox:复选框,继承自 ToggleButton,可以显示文本或图像,并在用户单击时 切换其IsChecked 属性的值。常用的特征有:
- Content:指定复选框的内容,可以是任意对象。
- IsChecked:指定复选框是否被选中,可以是 True(选中)、False(未选中) 或Null(不确定),默认为False。
- IsThreeState:指定复选框是否支持三种状态,如果为 True,则 IsChecked 属性可以为Null,否则只能为 True 或 False,默认为False。
RadioButton:单选按钮,继承自 ToggleButton,可以显示文本或图像,并在用户单击时切换其 IsChecked 属性的值。常用的特征有:
- Content:指定单选按钮的内容,可以是任意对象。
- IsChecked:指定单选按钮是否被选中,只能是 True(选中)或False(未选 中),默认为 False。
- GroupName:指定单选按钮所属的组名,只有同一组名的单选按钮之间才会 互斥,默认为空字符串。
ComboBoxItem:组合框项,继承自 ContentControl,可以显示文本或图像,并在用 3 户选择时触发 Selected 事件。常用的特征有:
- Content:指定组合框项的内容,可以是任意对象。
- IsSelected:指定组合框项是否被选中,默认为 False。
Frame:框架,继承自 ContentControl,可以显示一个页面(Page)或者一个导航窗 口(NavigationWindow),并提供导航功能。常用的特征有:
- Source:指定要显示的页面或导航窗口的URI地址。
- NavigationUIVisibility:指定导航界面的可见性,可以是Automatic(自动)、 Hidden(隐藏)或 Visible(可见),默认为Automatic。
GridViewColumnHeader:网格视图列头,继承自 ButtonBase,可以显示文本或图像, 并提供排序和拖动功能。常用的特征有:
- Content:指定网格视图列头的内容,可以是任意对象。
- Role:指定网格视图列头的角色,可以是 Normal(普通)、Floating(浮动)、 Padding(填充)或None(无),默认为Normal。
GroupItem:分组项,继承自 ContentControl,可以显示一个分组的内容,并提供展开 和折叠功能。常用的特征有:
- Content:指定分组项的内容,可以是任意对象。
- IsExpanded:指定分组项是否展开,默认为 True。
Label:标签,继承自 ContentControl,可以显示文本或图像,并提供快捷键和焦点功 能。常用的特征有:
- Content:指定标签的内容,可以是任意对象。
- Target:指定标签关联的控件,可以使用快捷键来激活该控件。
ListBoxItem:列表框项,继承自 ContentControl,可以显示文本或图像,并在用户选 择时触发 Selected 事件。常用的特征有:
- Content:指定列表框项的内容,可以是任意对象。
- IsSelected:指定列表框项是否被选中,默认为False。
ListViewItem:列表视图项,继承自 ListBoxItem,可以显示文本或图像,并在用户选 择时触发 Selected 事件。常用的特征有:
- Content:指定列表视图项的内容,可以是任意对象。
- IsSelected:指定列表视图项是否被选中,默认为 False。
NavigationWindow:导航窗口,继承自 ContentControl,可以显示一个页面(Page) 或者一个框架(Frame),并提供导航功能。常用的特征有:
- Source:指定要显示的页面或框架的 URI 地址。
- ShowsNavigationUI:指定是否显示导航界面,默认为 True。
PasswordBox:密码框,继承自 ContentControl,可以让用户输入密码,并提供安全 4 和验证功能。常用的特征有:
- Password:指定密码框中的密码字符串。
- PasswordChar:指定密码框中用于隐藏密码的字符,默认为“●”。
RadioButton:单选按钮,继承自 ToggleButton,可以显示文本或图像,并在用户单击 时切换其 IsChecked 属性的值。常用的特征有:
- Content:指定单选按钮的内容,可以是任意对象。
- IsChecked:指定单选按钮是否被选中,只能是 True(选中)或False(未选 中),默认为 False。
- GroupName:指定单选按钮所属的组名,只有同一组名的单选按钮之间才会 互斥,默认为空字符串。
RepeatButton:重复按钮,继承自 ButtonBase,可以显示文本或图像,并在用户按住 时重复触发 Click 事件。常用的特征有:
- Content:指定重复按钮的内容,可以是任意对象。
- Delay:指定重复按钮第一次触发Click 事件之前等待的时间(毫秒),默认为 600。
- Interval:指定重复按钮连续触发 Click 事件之间间隔的时间(毫秒),默认为 33。
StatusBarItem:状态栏项,继承自 ContentControl,可以显示文本或图像,并在状态 栏中占据一定空间。常用的特征有:
- Content:指定状态栏项的内容,可以是任意对象。
- HorizontalContentAlignment:指定状态栏项内容相对于水平方向的对齐方式, 默认为 Stretch(拉伸)。
ScrollViewer:滚动视图器,继承自 ContentControl,可以显示一个可滚动的内容,并 提供滚动条和缩放功能。常用的特征有:
- Content:指定滚动视图器要显示的内容,可以是任意对象。
- HorizontalScrollBarVisibility:指定水平滚动条的可见性,可以是 Disabled(禁 用)、Auto(自动)、Hidden(隐藏)或 Visible(可见),默认为 Hidden。
- VerticalScrollBarVisibility:指定垂直滚动条的可见性,同上,默认为Visible。
ToolTip:工具提示,继承自 ContentControl,可以显示一个简短的文本或图像,用于 描述其他控件的功能或用法。常用的特征有:
- Content:指定工具提示的内容,可以是任意对象。
- Placement:指定工具提示相对于目标控件的位置,可以是 Bottom(下)、Top (上)、Left(左)、Right(右)、Mouse(鼠标位置)、MousePoint(鼠标点)、 Center(中心)、Absolute(绝对位置)或Relative(相对位置),默认为 Mouse。
- IsOpen:指定工具提示是否打开,默认为 False。
UserControl:用户控件,继承自 ContentControl,可以自定义一个复合控件,包含多个子控件,并提供一致的外观和行为。常用的特征有:
- Content:指定用户控件的内容,可以是任意对象。
Window:窗口,继承自 ContentControl,可以显示一个独立的窗口,并提供标题栏、 边框、菜单、工具栏等功能。常用的特征有:
- Content:指定窗口的内容,可以是任意对象。
- Title:指定窗口的标题,可以是任意字符串。
- WindowStyle:指定窗口的样式,可以是 None(无边框)、SingleBorderWindow (单边框窗口)、ThreeDBorderWindow(三维边框窗口)或ToolWindow(工 具窗口),默认为SingleBorderWindow。
- WindowState:指定窗口的状态,可以是 Normal(正常)、Minimized(最小 化)或 Maximized(最大化),默认为Normal。
3 带标题内容控件
Expander 和 GroupBox 都是 WPF 中的带标题内容控件,它们都继承自HeaderedContentControl 类,可以显示一个标题(Header)和一个内容(Content)。它们的作用和常用特征及特征值 如下:
Expander:扩展器,可以显示一个可展开或折叠的内容区域。常用的特征有:
- Header:指定扩展器的标题,可以是任意对象。
- Content:指定扩展器的内容,可以是任意对象。
- IsExpanded:指定扩展器是否展开,默认为 False。
- ExpandDirection:指定扩展器的展开方向,可以是 Left(左)、Right(右)、 Up(上)或Down(下),默认为Down。
GroupBox:分组框,可以显示一个带边框的内容区域。常用的特征有:
- Header:指定分组框的标题,可以是任意对象。
- Content:指定分组框的内容,可以是任意对象。
- HeaderAlignment:指定分组框标题相对于边框的对齐方式,可以是Left(左)、 Center(中)或Right(右),默认为Left。
4 条目控件
ComboBox、ContextMenu、DataGrid、HeaderedItemsControl、ListBox、ListView、Menu 和 ToolBar 都是 WPF 中的条目控件,它们都继承自 ItemsControl 类,可以显示一列数据,一般情况下这列数据的类型是相同的。它们的作用和常用特征及特征值如下:
ComboBox:组合框,可以显示一个可下拉的列表,并让用户从中选择或输入一个选 项。常用的特征有:
- Items:指定组合框的数据集合,可以是任意对象的集合。
- SelectedItem:指定组合框当前选中的项,可以是任意对象。
- SelectedIndex:指定组合框当前选中项的索引,从 0 开始,如果没有选中项 则为 -1。
- Text:指定组合框当前显示的文本,可以是任意字符串。
- IsEditable:指定组合框是否可编辑,如果为 True,则用户可以在组合框中输 入文本,否则只能从列表中选择,默认为False。
ContextMenu:上下文菜单,可以显示一个弹出式的菜单,并让用户从中选择一个命 令或选项。常用的特征有:
- Items:指定上下文菜单的数据集合,通常是 MenuItem 的集合。
- PlacementTarget:指定上下文菜单相对于哪个控件弹出,默认为触发上下文 菜单的控件。
- Placement:指定上下文菜单相对于目标控件的位置,可以是 Bottom(下)、 Top(上)、Left(左)、Right(右)、Mouse(鼠标位置)、MousePoint(鼠标 点)、Center(中心)、Absolute(绝对位置)或 Relative(相对位置),默认为 MousePoint。
DataGrid:数据网格,可以显示一个表格形式的数据,并提供排序、分组、编辑等功 能。常用的特征有:
- ItemsSource:指定数据网格的数据源,通常是一个实现了 IEnumerable 接口 的对象,如ObservableCollection 等。
- AutoGenerateColumns:指定是否自动根据数据源生成列,默认为True。
- Columns:指定数据网格的列集合,每个 DataGridColumn 可以指定 Header (列头)、Binding(绑定字段)、Width(列宽)等属性。
- SelectedItem:指定数据网格当前选中的行,可以是任意对象。
- SelectedIndex:指定数据网格当前选中行的索引,从0开始,如果没有选中 行则为-1。
- SelectionMode:指定数据网格的选择模式,可以是Single(单选)或Extended (多选),默认为Extended。
HeaderedItemsControl:带标题条目控件,继承自ItemsControl,可以显示一个标题和 一列数据。常用的特征有:
- Header:指定带标题条目控件的标题,可以是任意对象。
- Items:指定带标题条目控件的数据集合,可以是任意对象的集合。
ListBox:列表框,继承自 ItemsControl,可以显示一列可选择的数据,并提供滚动条 和虚拟化功能。常用的特征有:
- ItemsSource:指定列表框的数据源,通常是一个实现了 IEnumerable 接口的 对象,如ObservableCollection 等。
- SelectedItem:指定列表框当前选中的项,可以是任意对象。
- SelectedIndex:指定列表框当前选中项的索引,从 0 开始,如果没有选中项 则为 -1。
- SelectionMode:指定列表框的选择模式,可以是 Single(单选)、Multiple(多 选)或Extended(多选),默认为 Single。
ListView:列表视图,继承自 ListBox,可以显示一列可选择的数据,并提供不同的 视图模式和分组功能。常用的特征有:
- ItemsSource:指定列表视图的数据源,通常是一个实现了 IEnumerable 接口 的对象,如ObservableCollection 等。
- SelectedItem:指定列表视图当前选中的项,可以是任意对象。
- SelectedIndex:指定列表视图当前选中项的索引,从 0 开始,如果没有选中 项则为 -1。
- SelectionMode:指定列表视图的选择模式,可以是 Single(单选)、Multiple (多选)或Extended(多选),默认为 Single。
- View:指定列表视图的视图模式,可以是 GridView(网格视图)、IconView (图标视图)、TileView(平铺视图)或 DetailView(详细视图)等。
Menu:菜单,继承自 ItemsControl,可以显示一个水平或垂直的菜单栏,并让用户从 中选择一个命令或选项。常用的特征有:
- Items:指定菜单的数据集合,通常是 MenuItem 的集合。
- IsMainMenu:指定菜单是否是主菜单,如果为 True,则菜单会自动获取焦点 和键盘输入,默认为 False。
ToolBar:工具栏,继承自 ItemsControl,可以显示一行或多行的工具按钮,并提供拖 动和溢出功能。常用的特征有:
- Items:指定工具栏的数据集合,通常是 Button、ToggleButton、Separator 等 控件的集合。
- Band:指定工具栏所在的行索引,从 0 开始,默认为 0。
- BandIndex:指定工具栏在同一行中的位置索引,从 0 开始,默认为 0。
5 带标题条目控件
TabControl 和 TreeView 都是 WPF 中的带标题条目控件,它们都继承自 ItemsControl 类,可以显示一列数据,一般情况下这列数据的类型是相同的。它们的作用和常用特征及特征值如 下:
TabControl:选项卡控件,可以显示一个可切换的选项卡集合,并让用户从中选择一 个显示不同的内容。常用的特征有:
- Items:指定选项卡控件的数据集合,通常是 TabPage 的集合。
- SelectedItem:指定选项卡控件当前选中的选项卡,可以是任意对象。
- SelectedIndex:指定选项卡控件当前选中选项卡的索引,从 0 开始,如果没有选中选项卡则为 -1。
- Alignment:指定选项卡控件的选项卡位置,可以是 Top(上)、Bottom(下)、 Left(左)或Right(右),默认为 Top。
- SizeMode:指定选项卡控件的大小模式,可以是 Fixed(固定)、FillToRight (填充到右边)或Normal(正常),默认为 Normal。
TreeView:树形视图控件,可以显示一个分层结构的数据,并让用户展开或折叠各 个节点。常用的特征有:
- Items:指定树形视图控件的数据集合,通常是TreeNode的集合。
- SelectedItem:指定树形视图控件当前选中的节点,可以是任意对象。
- SelectedIndex:指定树形视图控件当前选中节点的索引,从 0 开始,如果没有选中节点则为-1。
- ShowRootLines:指定树形视图控件是否显示根节点的连接线,默认为 True。
- ShowPlusMinus:指定树形视图控件是否显示展开或折叠按钮,默认为 True。
6 特殊内容控件
TextBox、TextBlock 和 Image 都是 WPF 中的特殊内容控件,它们不属于 ContentControl 类, 但也有Content 属性。它们的作用和常用特征及特征值如下:
TextBox:文本框,可以让用户输入和编辑文本,并提供撤销、重做、剪切、复制、 粘贴等功能。常用的特征有:
- Text:指定文本框中的文本内容,可以是任意字符串。
- TextWrapping:指定文本框是否自动换行,可以是 NoWrap(不换行)、Wrap (换行)或WrapWithOverflow(超出边界时换行),默认为 NoWrap。
- TextAlignment:指定文本框中的文本对齐方式,可以是 Left(左对齐)、Center (居中)、Right(右对齐)或Justify(两端对齐),默认为 Left。
- AcceptsReturn:指定文本框是否接受回车键输入,如果为 True,则用户可以 在文本框中输入多行文本,否则回车键无效,默认为 False。
- AcceptsTab:指定文本框是否接受制表键输入,如果为 True,则用户可以在文本框中输入制表符,否则制表键无效,默认为 False。
TextBlock:文本块,可以显示一段可自由控制格式的文本,并支持内联元素和绑定。 常用的特征有:
- Text:指定文本块中的文本内容,可以是任意字符串。
- TextWrapping:指定文本块是否自动换行,可以是 NoWrap(不换行)、Wrap (换行)或WrapWithOverflow(超出边界时换行),默认为 NoWrap。
- TextAlignment:指定文本块中的文本对齐方式,可以是 Left(左对齐)、Center (居中)、Right(右对齐)或 Justify(两端对齐),默认为 Left。
- Inlines:指定文本块中的内联元素集合,可以是 Run(普通文本)、Bold(加 粗文本)、Italic(斜体文本)、Underline(下划线文本)、Hyperlink(超链接 文本)等。
Image:图像,可以显示一个图像,并支持缩放和旋转。常用的特征有:
- Source:指定图像的源地址,可以是一个 URI 字符串或者一个 BitmapImage 对象。
- Stretch:指定图像的缩放模式,可以是 None(不缩放)、Fill(填充)、Uniform (等比例缩放)或UniformToFill(等比例填充),默认为Uniform。
- RenderTransform:指定图像的渲染变换,可以是一个 Transform 对象,如 RotateTransform(旋转变换)、ScaleTransform(缩放变换)、SkewTransform (倾斜变换)或TranslateTransform(平移变换)等。