当前位置: 首页 > news >正文

WPF Window的所有重要生命周期事件

🔄 WPF Window 完整生命周期事件

📌 窗口创建和加载阶段

// 1. 窗口初始化(构造函数执行后)
Initialized += (s, e) => { };  
// 首次初始化时触发,早于Loaded// 2. 窗口加载
Loaded += (s, e) => { };  
// 窗口及所有子元素加载完成,UI已渲染,最常用// 3. 内容渲染
ContentRendered += (s, e) => { };  
// 窗口内容首次渲染到屏幕后触发(晚于Loaded)// 4. 窗口显示
SourceInitialized += (s, e) => { };  
// 窗口句柄(HWND)创建后触发,可以使用WindowInteropHelper

🎯 窗口激活/失活阶段

// 5. 窗口激活
Activated += (s, e) => { };  
// 窗口获得焦点时触发(用户点击窗口、Alt+Tab切换到窗口)// 6. 窗口失活
Deactivated += (s, e) => { };  
// 窗口失去焦点时触发(切换到其他窗口)// 7. 获得键盘焦点
GotKeyboardFocus += (s, e) => { };  
// 窗口内某元素获得键盘焦点// 8. 失去键盘焦点
LostKeyboardFocus += (s, e) => { };  
// 窗口内某元素失去键盘焦点

📐 窗口状态变化阶段

// 9. 状态改变
StateChanged += (s, e) => { };  
// 窗口状态改变时触发(Normal ⇄ Maximized ⇄ Minimized)// 10. 位置改变
LocationChanged += (s, e) => { };  
// 窗口在屏幕上的位置改变// 11. 大小改变
SizeChanged += (s, e) => { };  
// 窗口尺寸改变时触发// 12. DPI改变(高DPI支持)
DpiChanged += (s, e) => { };  
// 窗口在不同DPI显示器间移动时触发

窗口关闭阶段

// 13. 正在关闭(可取消)
Closing += (s, e) => {// e.Cancel = true;  // 可以阻止窗口关闭
};  
// 窗口即将关闭,可以进行保存提示等操作// 14. 已关闭(不可取消)
Closed += (s, e) => { };  
// 窗口已关闭,无法取消,用于清理资源// 15. 卸载
Unloaded += (s, e) => { };  
// 窗口从可视化树中移除时触发

📊 完整生命周期时序图

构造函数执行↓
Initialized (初始化完成)↓
SourceInitialized (窗口句柄创建)↓
Loaded (UI加载完成) ← 最常用的启动事件↓
ContentRendered (内容首次渲染)↓
Activated (窗口激活) ← 可能多次触发↓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
运行期间可能触发的事件:
- StateChanged (最小化/最大化/正常)
- LocationChanged (移动窗口)
- SizeChanged (调整大小)
- Activated / Deactivated (焦点切换)
- DpiChanged (跨显示器)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━↓
Closing (即将关闭,可取消) ← 保存数据的最后机会↓
Closed (已关闭)↓
Unloaded (从可视化树移除)↓
对象销毁

💡 实际应用场景示例

public MainWindow()
{InitializeComponent();// ✅ 初始化数据和配置Loaded += (s, e) => {LoadUserSettings();StartBackgroundServices();};// ✅ 监控窗口状态变化,更新UIStateChanged += (s, e) => {if (WindowState == WindowState.Minimized)PauseVideoPlayback();else if (WindowState == WindowState.Normal)ResumeVideoPlayback();};// ✅ 窗口激活时刷新数据Activated += (s, e) => {RefreshNotifications();};// ✅ 失去焦点时自动保存Deactivated += (s, e) => {AutoSaveDocument();};// ✅ 关闭前确认Closing += (s, e) => {if (HasUnsavedChanges){var result = MessageBox.Show("有未保存的更改,确定要关闭吗?","确认", MessageBoxButton.YesNo);if (result == MessageBoxResult.No)e.Cancel = true;  // 取消关闭}};// ✅ 清理资源Closed += (s, e) => {StopBackgroundServices();DisposeResources();};// ✅ 跨DPI显示器适配DpiChanged += (s, e) => {UpdateIconsForNewDpi(e.NewDpi);};
}

🎯 常用事件推荐

事件 使用频率 典型用途
Loaded ⭐⭐⭐⭐⭐ 初始化、加载数据、启动服务
Closing ⭐⭐⭐⭐⭐ 保存数据、确认关闭
StateChanged ⭐⭐⭐⭐ 响应最小化/最大化
SizeChanged ⭐⭐⭐⭐ 响应式布局调整
Activated ⭐⭐⭐ 刷新数据、恢复状态
Closed ⭐⭐⭐ 清理资源
ContentRendered ⭐⭐ 启动动画、首次渲染后的操作
DpiChanged ⭐⭐ 高DPI适配
http://www.jsqmd.com/news/355163/

相关文章:

  • 聊聊金蝙蝠工艺家具的舒适度,广东地区红木家具品牌推荐哪家 - myqiye
  • 2026年2月幼儿混油皮面霜产品推荐,水油平衡测评与清爽控油护肤指南 - 品牌鉴赏师
  • 2026细软发质救星!这些发泥好用到哭 - 品牌测评鉴赏家
  • 2026年2月阳朔民宿权威推荐,硬件设施与游客口碑深度解析 - 品牌鉴赏师
  • C#中的事件订阅运算符
  • 这大概是我读过关于AI大模型最全面、好读又易懂的文章了
  • 化工产品配送能提供全程跟踪的公司费用多少,怎么选择 - mypinpai
  • 历年蓝桥杯Python青少组中/高级选拔赛(STEMA)真题解析 | 2022年8月
  • 2026年靠谱的工业厂房通风气楼,薄型通风气楼厂家选型参考指南 - 品牌鉴赏师
  • Flutter 列表优化:ListView 性能调优与复杂列表构建
  • AI 编辑器Qoder
  • 上海专业医疗空间装修团队价格多少,技良行费用高吗? - 工业设备
  • 学区房居住体验与教育价值怎么权衡,重庆知房来分享经验 - 工业品网
  • 2026年纺织工厂设计机构最新推荐,纺织工程设计 - 品牌策略师
  • 2026年磨刀机厂家选购推荐,铣刀磨床/五轴数控刀具磨床 - 品牌策略师
  • 2026年内蒙古口碑不错的牧草膜公司排名推荐,看哪家性价比高? - 工业推荐榜
  • 某单位僵尸木马病毒攻击链全景分析
  • 基于熵权法和灰色关联分析的综合评价算法MATLAB代码
  • 2026年五轴数控刀具磨床公司推荐top榜单,磨刀机/铣刀磨床 - 品牌策略师
  • 聊聊包装定制彩盒包装性价比高的厂家有哪些 - 工业品牌热点
  • 2026年2月婴儿婴儿便携装唇膏产品推荐,随身补涂测评与出行护唇优选 - 品牌鉴赏师
  • 2026年五轴数控刀具磨床厂家最新推荐/磨刀机,铣刀磨床 - 品牌策略师
  • 2026年仿竹护栏优质厂家推荐榜契合自然场景 - 真知灼见33
  • 大润发购物卡回收哪里靠谱?避坑指南+正规渠道推荐 - 可可收
  • WPF常用 NuGet 包的作用和用途
  • 选择央国企就业职业规划服务,国育甄选怎么样 - 工业品牌热点
  • 2026凤凰职教学培课堂怎么样?课程体系与口碑测评 - 品牌排行榜
  • 熊博士好门窗甄选价格多少钱,费用明细全解析 - mypinpai
  • PTA乙级-1002 写出这个数
  • 干发扁塌救星!3款宝藏蓬松水/洗护清单|姐妹闭眼冲 - 品牌测评鉴赏家