一、wpf控件的继承树

二、所有控件共同父类
总结:
这样记:除去字体的设置、前景色、背景色、Padding、模板、控件内容的对齐方式、边框是control有的,其他的东西所有控件全有。
- Object是所有 .NET 对象的基类
- 所有控件后台线程都可以通过Dispatcher访问
- 所有控件的几乎所有属性都可以数据驱动更新(?不懂)
- 所有控件都支持鼠标、键盘和触摸事件
- 所有控件都支持设置:
- 宽高
- 最小/最大尺寸
HorizontalAlignment/VerticalAlignment- 父容器中的对齐方式(默认值为:Stretch)Style- 样式DataContext- 数据上下文- Resources-资源
- ContextMenu属性:设置与获取控件的上下文菜单 ,就是鼠标在控件上右键时弹出来的菜单。
- Cursor属性:获取或设置在鼠标指针位于此元素上时显示的光标。
- Parent属性:获取此元素的逻辑父元素。它是一个只读属性。
- Tag属性:可以保存任意类型的对象值,它就像FrameworkElement类身上的一个小口袋,但确能容纳万物。我们通常会将一些与控件相关的数据临时存放在Tag属性中,当把控件作为参数传递时,小口袋里面的对象也随之传递过去了
- ToolTip属性
Margin- 外边距
Object
定义:所有 .NET 对象的基类
DispatcherObject
定义: 当后台线程需要访问 UI 线程上的控件或对象时,WPF 会在 UI 线程上提供一个"中间商"------Dispatcher(调度员)。这个调度员被封装在抽象类 DispatcherObject 中,所有控件都继承自 DispatcherObject。因此,当你在后台线程中需要访问控件时,可以从控件身上找到这位中间商 Dispatcher,由它代为完成对控件的操作与访问。
DependencyObject
**定义:**数据驱动模式,是因为几乎WPF控件的所有属性都可以采用这种模式去更新属性的Visual
**定义:**主要是为 WPF 中的呈现提供支持,其中包括命中测试、坐标转换和边界框计算
UIElement
定义: UIElement基类为我们提供了一系列的鼠标、键盘和触摸事件,并提供了一些常用的依赖属性(Visibility、IsEnabled、IsMouseOver、IsKeyboardFocused)等。它可以呈现继承它的所有控件,为控件布局时调整位置和大小,响应用户的输入,引发一系列的路由事件。
FrameworkElement
定义:对UIElement的补充。
Width/Height- 宽度/高度(只有Grid有*,其他都是数字或者auto(默认值):根据内容决定大小)MinWidth/MinHeight- 最小尺寸MaxWidth/MaxHeight- 最大尺寸HorizontalAlignment/VerticalAlignment- 对齐方式(默认值为:Stretch)Style- 样式DataContext- 数据上下文- Resources-资源
- ContextMenu属性:设置与获取控件的上下文菜单 ,就是鼠标在控件上右键时弹出来的菜单。
- Cursor属性:获取或设置在鼠标指针位于此元素上时显示的光标。
- Parent属性:获取此元素的逻辑父元素。它是一个只读属性。
- Tag属性:可以保存任意类型的对象值,它就像FrameworkElement类身上的一个小口袋,但确能容纳万物。我们通常会将一些与控件相关的数据临时存放在Tag属性中,当把控件作为参数传递时,小口袋里面的对象也随之传递过去了
- ToolTip属性
Margin- 外边距
三、Shape(图像控件)
四、Control
字体的设置、前景色、背景色、Padding、模板、控件内容的对齐方式、边框。
|----------------------------|--------------------------------------------|
| 属性 | 说明 |
| FontStyle | 获取或设置控件的字体结构,类似于Word中字体的常规、斜体或倾斜 |
| FontStretch | 获取或设置紧缩或在屏幕上展开一种字体的程度。 |
| FontSize | 获取或设置字体大小。 |
| FontFamily | 获取或设置控件的字体系列。如:微软雅黑 = "Microsoft YaHei UI" |
| Foreground | 获取或设置控件的字体颜色,也就是所谓的前景色画笔,它是一个刷子(Brush) |
| Background | 获取或设置一个用于描述控件的背景画笔。 |
| BorderThickness | 获取或设置控件的边框宽度。 |
| IsTabStop | 获取或设置一个值,该值指示控件是否包括在选项卡上的导航窗格中。 |
| VerticalContentAlignment | 获取或设置控件的内容的垂直对齐方式。 |
| TabIndex | 获取或设置一个值,确定当用户导航控件通过使用 TAB 键元素接收焦点的顺序。 |
| Padding | 获取或设置在控件中的填充量。 |
| Template | 获取或设置控件模板。 |
| FontWeight | 获取或设置指定的字体粗细。 |
| BorderBrush | 获取或设置一个用于描述一个控件的边框背景画笔。 |
| HorizontalContentAlignment | 获取或设置控件的内容的水平对齐方式。 |
4.1ContentControl(内容控件)
有一个Content属性,关键是这个属性的类型是object。
4.2ItemControl(条目控件)
Panel(布局控件的基类)
属性:
Background
Children属性:这是一个集合属性,也就是说,所有的布局控件都可以添加多个子元素
**注意:**Panel的Background属性。有时候我们希望在布局控件上实现鼠标点击事件的获取,请记得一定要给Background属性设置一个颜色值,如果不希望有具体的颜色,那就设置成Transparent 。不然,您会踩坑的!因为布局控件的Background属性没有值时,是不能引发鼠标相关事件的。
WPF 控件何时由内容决定大小?何时填满父容器?
控件的大小行为(是"由内容决定"还是"占满父容器")主要由 尺寸属性 (Width/Height)、对齐属性 (HorizontalAlignment/VerticalAlignment)以及 父布局容器的特性 共同决定。
最终显示的大小 = 父容器分配的空间 ∩ 子元素自身约束
| Stretch(默认) | 非 Stretch |
|---|
| | |
|-----------------|--------------------|------------|
| Width/Height 未设 | 填满父容器给的 slot(有限空间) | 按内容大小 |
| Width/Height 设了 | 固定尺寸,Stretch 不再拉伸 | 固定尺寸,按对齐定位 |
- 父容器给无限空间时(StackPanel 的堆叠方向、Canvas),Stretch 没有有限 slot 可填,结果还是内容大小。
五、control的子类
ContentControl
Button (按钮)
常用属性:
-
Content- 按钮显示的内容(可以是文本或其他元素) -
IsEnabled- 是否启用按钮 -
BorderBrush/BorderThickness- 边框颜色/粗细 -
Padding- 内边距:内部元素到边框距离(左上右下) -
Command- 绑定的命令 -
CommandParameter- 命令参数
常用事件:
Click- 点击事件
<Button Content="点击我" Click="Button_Click"/>
TextBox (文本框)
常用属性:
-
Text- 文本框内容 -
MaxLength- 最大字符数 -
TextWrapping- 文本换行方式 -
IsReadOnly- 是否只读 -
SelectionStart/SelectionLength- 选中文本 -
AcceptsReturn- 是否接受回车 -
AcceptsTab- 是否接受制表符
常用方法:
-
Clear()- 清空文本 -
SelectAll()- 全选文本 -
AppendText(string)- 追加文本
常用事件:
-
TextChanged- 文本改变时触发 -
PreviewTextInput- 文本输入前触发 -
LostFocus- 失去焦点时触发
TextBox文本不居中引入问题
在 WPF 的 TextBox 控件中,HorizontalContentAlignment="Center" 和 TextAlignment="Center" 虽然最终呈现的视觉效果都是让文字水平居中,但它们的作用层级 和控制范围有着本质的区别
HorizontalContentAlignment="Center"(控件内容层级) :
它继承自Control基类,控制的是整个内容对象 (在 TextBox 中,这个内容对象是内部承载文字的ScrollViewer)在控件内部的水平对齐方式。简单来说,它决定了"装文字的那个容器"在 TextBox 里怎么摆放。TextAlignment="Center"(文本排版层级) :
它是TextBox专门用来控制纯文本排版的属性。它直接作用于文字本身,决定了文字段落在其行宽内的水平对齐方式。
Label (标签)
常用属性:
-
Content- 显示内容 -
Target- 指定关联的控件(设置助记键时使用)
<Label Content="_Username:" Target="{Binding ElementName=userNameTextBox}"/>
<TextBox x:Name="userNameTextBox"/>
CheckBox (复选框)
常用属性:
-
IsChecked- 是否选中(bool?,支持三种状态) -
Content- 显示内容 -
ThreeState- 是否支持三种状态
常用事件:
-
Checked/Unchecked- 选中状态改变时触发 -
Indeterminate- 不确定状态时触发
RadioButton (单选按钮)
常用属性:
-
IsChecked- 是否选中 -
Content- 显示内容 -
GroupName- 分组名称(同组内互斥)
常用事件:
Checked- 选中时触发
Slider (滑块)
常用属性:
-
TickPlacement-显示刻度
-
Minimum/Maximum- 最小/最大值(最大值默认值为0) -
Value- 当前值 -
TickFrequency- 刻度间隔 -
IsSnapToTickEnabled- 是否吸附到刻度 -
Orientation- 方向(Horizontal/Vertical) -
Ticks-刻度出现在特定位置
常用事件:
ValueChanged- 值改变时触发
注意:
最大值默认值为10,需要自己设置
原生slider刻度没有数值标识
ProgressBar (进度条)
常用属性:
-
Minimum/Maximum- 最小/最大值 -
Value- 当前值 -
IsIndeterminate- 是否为不确定状态(动态显示)
DatePicker (日期选择器)
常用属性:
-
SelectedDate- 选择的日期(DateTime?) -
DisplayDate- 显示的日期 -
DisplayDateStart/DisplayDateEnd- 可选日期范围 -
IsDropDownOpen- 下拉框是否打开
常用事件:
SelectedDateChanged- 日期改变时触发
Expander (可展开控件)
常用属性:
-
IsExpanded- 是否展开 -
Header- 标题内容
常用事件:
Expanded/Collapsed- 展开/折叠时触发
集合控件
ListBox (列表框)
常用属性:
-
ItemsSource- 数据源 -
SelectedItem- 当前选中项 -
SelectedItems- 当前选中的多项(当SelectionMode为Multiple或Extended时) -
SelectionMode- 选择模式(Single/Multiple/Extended) -
DisplayMemberPath- 显示成员的路径
常用方法:
ScrollIntoView(object)- 滚动到指定项
常用事件:
SelectionChanged- 选择项改变时触发
ComboBox (下拉框)
常用属性:
-
ItemsSource- 数据源 -
SelectedItem- 当前选中项 -
SelectedIndex- 当前选中索引 -
DisplayMemberPath- 显示成员的路径 -
IsEditable- 是否可编辑 -
Text- 编辑框中的文本(当IsEditable=true时)
常用方法:
-
Add(object)- 添加项 -
Remove(object)- 移除项 -
Clear()- 清空所有项
常用事件:
SelectionChanged- 选择项改变时触发
TreeView (树形视图)
常用属性:
-
ItemsSource- 数据源 -
SelectedItem- 当前选中项
常用方法:
ExpandSubtree()- 展开所有子项
常用事件:
SelectedItemChanged- 选中项改变时触发
DataGrid (数据表格)
常用属性:
-
ItemsSource- 数据源 -
SelectedItem- 当前选中行 -
AutoGenerateColumns- 是否自动生成列 -
CanUserAddRows- 用户是否可以添加行 -
CanUserDeleteRows- 用户是否可以删除行
常用方法:
-
BeginEdit()- 开始编辑 -
CommitEdit()- 提交编辑 -
CancelEdit()- 取消编辑
常用事件:
-
SelectionChanged- 选择改变时触发 -
RowEditEnding- 行编辑结束时触发
TabControl (选项卡)
常用属性:
-
SelectedIndex- 当前选中标签索引 -
SelectedItem- 当前选中标签项
常用事件:
SelectionChanged- 标签切换时触发
Menu (菜单)
常用属性:
Items- 菜单项集合
常用方法:
AddMenuItem()- 添加菜单项
ContextMenu (上下文菜单)
常用属性:
-
Items- 菜单项集合 -
IsOpen- 菜单是否打开
ToolTip (工具提示)
常用属性:
-
Content- 提示内容 -
Placement- 提示位置 -
IsOpen- 是否显示
ScrollViewer (滚动视图)
常用属性:
-
HorizontalScrollBarVisibility- 水平滚动条可见性 -
VerticalScrollBarVisibility- 垂直滚动条可见性 -
Content- 滚动内容
三、FrameworkElement的子类
3.1Image
常用属性:
-
Source- 图像源(BitmapImage/Uri) -
Stretch- 拉伸方式(None/Fill/Uniform/UniformToFill) -
StretchDirection- 拉伸方向
<Image Source="Images/logo.png" Stretch="Uniform"/>
3.2Border (边框)
常用属性:
BorderBrush - 边框颜色
BorderThickness - 边框粗细
CornerRadius - 圆角半径
Background - 背景色
3.3TextBlock
也就是说没有control的属性,以下这些都没。
四、panel的子类
4.1stackpanel
Orientation="Horizontal"且有子控件时,水平方向的大小取决于内容