跳转到主要内容

WPF基础功法

Application的生命周期

OnStartup:表示启动应用程序时
OnActivated:表示激活应用程序时
OnDeactivated:表示由激活状态变为非激活状态时
OnExit:表示退出应用程序时

Window窗体的生命周期

SourceInitialized	创建窗体源时引发此事件
Activated	当前窗体成为前台窗体时引发此事件
Loaded	当前窗体内部所有元素完成布局和呈现时引发此事件
ContentRendered	当前窗体的内容呈现之后引发此事件
------Deactivated	当前窗体成为后台窗体时引发此事件====Activated	当前窗体成为前台窗体时引发此事件
Closing	当前窗体关闭之前引发此事件
Deactivated	当前窗体成为后台窗体时引发此事件
Closed	当前窗体关闭之后引发此事件
Unloaded	当前窗体从元素树中删除时引发此事件

ContentControl

Content属性在ContentControl类中

加载和解析 XAML

编译器会将 XAML 文件(如 MainWindow.xaml)编译为 BAML (Binary Application Markup Language),这是一种压缩和优化的二进制格式。
运行时,CLR 会加载 BAML 并将其解析回一个对象树。这个过程会:
实例化 XAML 中定义的每一个元素(如 <Window>, <Grid>, <Button>)为 .NET 对象。
设置每个对象的属性(如 Width, Height, Content)。
根据元素的嵌套关系,建立起逻辑树 (Logical Tree)。

对象初始化过程中,会按顺序引发一系列事件

Initialized: 元素已被初始化并从 XAML 中加载了基本属性。此时逻辑树已建立,但尚未进行布局测量和排列。
Loaded: 整个窗口(或页面)已加载完毕,逻辑树完整,并且即将被呈现到屏幕上。这是通常进行最终初始化操作(如加载数据)的地方。
  • 逻辑树 (Logical Tree): 反映 XAML 中声明的控件层次结构,用于核心功能如属性继承、资源查找、事件路由。
  • 可视树 (Visual Tree): 描述控件视觉结构的更底层、更详细的树,用于渲染和命中测试。你可以使用 VisualTreeHelper 来遍历它。
  • 布局系统 (Layout System): 递归的 测量(Measure) -> 排列(Arrange) 过程。任何影响布局的变化(如窗口大小调整、内容更改)都会触发一个新的布局传递 (Layout Pass)。
  • 保留模式图形 (Retained Mode Graphics): 与“立即模式”(如 WinForms 的 Paint 事件)相反,WPF 维护一个可视化对象列表(可视树),并由系统负责在需要时重绘它们。开发者只需声明“要什么”,而不需关心“何时画”和“怎么画”。