WPF(控件的继承树、内容控件、布局控件)

一、wpf控件的继承树

二、所有控件共同父类

总结:

这样记:除去字体的设置、前景色、背景色、Padding、模板、控件内容的对齐方式、边框是control有的,其他的东西所有控件全有。

  1. Object是所有 .NET 对象的基类
  2. 所有控件后台线程都可以通过Dispatcher访问
  3. 所有控件的几乎所有属性都可以数据驱动更新(?不懂)
  4. 所有控件都支持鼠标、键盘和触摸事件
  5. 所有控件都支持设置:
  • 宽高
  • 最小/最大尺寸
  • 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的补充。

  1. Width/Height - 宽度/高度(只有Grid有*,其他都是数字或者auto(默认值):根据内容决定大小)
  2. MinWidth/MinHeight - 最小尺寸
  3. MaxWidth/MaxHeight - 最大尺寸
  4. HorizontalAlignment/VerticalAlignment - 对齐方式(默认值为:Stretch)
  5. Style - 样式
  6. DataContext - 数据上下文
  7. Resources-资源
  8. ContextMenu属性:设置与获取控件的上下文菜单 ,就是鼠标在控件上右键时弹出来的菜单。
  9. Cursor属性:获取或设置在鼠标指针位于此元素上时显示的光标。
  10. Parent属性:获取此元素的逻辑父元素。它是一个只读属性。
  11. Tag属性:可以保存任意类型的对象值,它就像FrameworkElement类身上的一个小口袋,但确能容纳万物。我们通常会将一些与控件相关的数据临时存放在Tag属性中,当把控件作为参数传递时,小口袋里面的对象也随之传递过去了
  12. ToolTip属性
  13. 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 - 标签切换时触发

常用属性:

  • 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"且有子控件时,水平方向的大小取决于内容

相关推荐
avi91113 天前
电影开源Jevdo - 源码介绍(vue版)没有android 和 没有wpf
android·wpf·框架·数据爬虫·meego·电影管理
吾与谁归in4 天前
C#脚本工具,支持智能提示自动补全(WPF + Roslyn + AvalonEdit)
开发语言·c#·wpf
昂好的day4 天前
WPF 从零入门(上):WPF 是什么、XAML 语法、布局与样式全解
开发语言·c#·wpf
影寂ldy5 天前
WPF导航窗体+Page页面跳转 知识点整理
wpf
He BianGu5 天前
【WPF-Control教程】IOC 依赖注入
c#·wpf·wpf-control
He BianGu5 天前
【WPF-Control教程】H.Extensions.Behvaiors 开发文档
c#·wpf·wpf-control
He BianGu5 天前
【WPF-Control教程】H.Style 开发文档
c#·wpf·wpf-control
麻瓜code5 天前
分布式锁演进:从一个用户下两单,到 Redisson,我改了四版
分布式·wpf
He BianGu5 天前
【WPF-Control教程】MVVM 二次开发文档
c#·wpf·wpf-control