定义
能够与用户交互的元素。继承自System.Windows.Control,基类提供以下能力:
- 设置对齐方式
- 设置Tab顺序
- 背景,前景,边框
- 文本内容尺寸和字体
注意在有时候,我们会在描述的时候说:这是界面上的一个控件,这是界面上的一个元素,那么,控件和元素有什么关系和区别呢?实际上,界面上的可视化的内容就是元素,而能够接受焦点并且能与用户交互的元素叫做控件,所以元素的概念包含控件。这点大家了解即可。
控件的分类
- 内容控件,能够嵌套元素,无限扩展显示。比如Button,Label等,大部分控件都是内容控件
- 带标题的内容控件,包括TabItem,GroupBox
- 文本控件,允许输入文本,密码或者富文本的控件,比如TextBox
- 列表控件,ListBox
- 基于范围的控件,ProgressBar
- 日期控件,Calendar,DatePicker
内容控件
包含单个嵌套元素的控件,这也是跟布局容器不同的地方。下面是内容控件的层级结构
- 布局容器在Panel基类上提供了Children集合保存所有的子控件,而内容控件在基类上提供了Content控件来接收单个元素
- Content属性的显示:如果其属性值继承自UIElement,则绘制出来,如果不是继承自UIElement,则直接调用ToString方法显示。这就是界面上出错的时候显示一串类型名的原因
- Window元素不允许被放到内容控件中
- HasContent判断控件中是否有内容
- ContentTemplete用于告诉控件如何显示他不识别的对象,数据模板在之后学习
// 直接给内容控件的Content赋值 <BUtton> <Image/> </Button> // 嵌套多个元素 <BUtton> <StackPanel> <Image/> <Image/> <Image/> </StackPanel> </Button>
- 在外层控件给内容的对齐方式需要使用HorizontalContentAlignment属性设置
- 在外层控件使用Padding属性给内容添加内边距
- 按钮内置的细节如阴影背景,圆角边框这些不能通过在按钮中改变内容来改变,需要使用控件模板来改变这些设定。
- 自此,我们提到了两个模板,数据模板ContentTemplate和控件模板,数据模板用于告诉控件如何显示他不识别的对象,控件模板用于改变控件原有的行为。
带标题的内容控件
带标题的内容控件是在内容控件的基础上,原有的Content不变,新增了一个Header属性,具体的例子在下面实例中介绍。
文本控件
- TextBox 继承自TextBoxBase,只存储字符串
- RichTextBox 继承自TextBoxBase,存储复杂元素FlowDocument
- PasswordBox 继承自Control,内部使用SecureString
列表控件
- 列表控件继承自ItemsControl
- 使用列表控件最好配合数据绑定使用
基于范围的控件
- 基于范围的控件包括 ScrollBar ProcessBar Slider
- 基于范围的控件继承自 RangeBase
- RangeBase提供以下属性
- 通常不使用ScrollBar,而是使用其包装版本ScrollViewer
日期控件
-
日期控件有两个 Calendar日历 DatePicker 时间选择控件,日历控件会显示一个日历,时间选择控件只会弹出一个选择框,在点击选择按钮的时候才会弹出可以选择的日历
-
日期控件的属性很类似,如下图
控件属性
前景色,背景色
WPF中分别用Background和Foreground来设置背景色和前景色
- 需要给对象设置Brush对象作为值,Brush支持单一颜色,渐变色等。具体的画刷使用我们在后面专门介绍
- 代码设置画刷
lbl_source.Bac