- 什么是控件
WPF中是数据驱动UI,数据是核心、是主动的;UI从属与数据并表达数据、是被动的。UI的功能是让用户观察和操作数据,为了让用户观察数据,我们需要用UI元素来显示数据;为了让用户操作数据,我们需要用UI元素响应用户的操作。WPF中把那些能够显示数据、响应用户操作的UI元素称为控件。
控件所显示的数据,我们称之为“数据内容”,控件在响应用户的操作后会执行自己的一些方法或以事件的形式通知应用程序,我们称之为控件的“行为”或“算法内容”。
WPF中控件Control是数据和行为的载体,没有固定的形象。如Button,凡是能显示一些提示内容(如文字、图片)并能响应用户点击的UI元素都是Button,不一定是方方正正的。
- 控件的种类
我们常用的控件主要有以下几类:
- 布局控件:可以容纳多个控件或嵌套其他布局控件,用于在UI上组织和排列控件。如Grid、StackPanel、DockPanel等,它们的父类是Panel。
- 内容控件:只能容纳一个其他控件或布局控件作为它的内容,如Button,window,它们的父类是ContentControl。
- 带标题内容控件:相当于一个内容控件,但可以加一个标题,标题部分也可以容纳一个控件或布局,如GroupBox、TabItem,它们的父类是HeaderContentControl。
- 条目控件:可以显示一列数据,一般情况下这列数据的类型相同,如ListBox、ComboBox,它们的共同基类是ItemsControl。
- 带标题条目控件:相当于一个条目控件加上一个标题显示区,如TreeViewItem、MenuItem,用于显示层级关系,它们的共同基类是HeaderItemControl。
- 特殊内容控件:如TextBox显示字符串,Image容纳图片等。
六类控件的派生关系如下图:
- WPF内容模型
根据是否可以装在内容、能够装在什么内容,WPF的UI元素可以分为如下几种类型:
类别 | 注释 |
ContentControl | 单一内容控件 |
HeaderContentControl | 带标题的单一内容控件 |
ItemsControl | 以条目集合为内容的控件 |
HeaderItemsControl | 带标题的以条目集合为内容的控件 |
Decorator | 控件装饰元素 |
Panel | 面板类元素 |
Adorner | 文字点缀 |
Flow Text | 流式文本元素 |
TextBox | 文本输入框 |
TextBlock | 静态文字 |
Shape |
图形元素 |
- WPF布局元素
WPF的布局理念就是把一个布局元素作为ContentControl或HeaderContentControl族控件的Content,再在布局元素里添加要被布局的子级控件,如果UI局部需要更复杂的布局,那就在这个区域放置一个子级的布局元素,形成布局元素的嵌套。
WPF的布局元素有以下几种:
- Grid:网格。可以自定义行和列并通过行列的数量、行高和列宽来调整控件的布局。近似于Html中的Table。
- StackPanel:栈式面板。可将包含的元素在竖直或水平方向上排成一条直线,当移除一个元素后,后面的元素会自动向前移动以填充空缺。
- Canvas:画布。内部元素可以使用以像素为单位的绝对坐标进行定位,类似于Windos Form编程的布局方式。
- DockPanel:泊靠式面板。内部元素可以选择泊靠方向,类似于在windows Form编程中设置控件的Dock属性。
- WrapPanel:自动折行面板。内部元素在排满一行后能够自动折行,类似与HTML中的流式布局。