和所有类一样,窗口也有生存期,在第一次实例化窗口时生存期开始,然后就可以显示、激活和停用窗口,直到最终关闭窗口。

1、显示窗体

  • 构造函数
  • Show()、ShowDialog()方法:Show()方法显示非模态窗口,这意味着应用程序所运行的模式允许用户在同一个应用程序中激活其他窗口。ShowDialog()方法显示模态窗口,这个基本和WinForm类似
  • 当初始化窗口时,将引发 SourceInitialized 事件并显示窗口。

2、窗体的激活

在首次打开一个窗口时,它便成为活动窗口(除非是在 ShowActivated 设置为 false 的情况下显示)。 活动窗口是当前正在捕获用户输入(例如,键击和鼠标单击)的窗口。 当窗口变为活动窗口时,它会引发 Activated 事件。

当第一次打开窗口时,只有在引发了 Activated 事件之后,才会引发 Loaded 和 ContentRendered 事件。 记住这一点,在引发 ContentRendered 时,便可认为窗口已打开。

窗口变为活动窗口之后,用户可以在同一个应用程序中激活其他窗口,还可以激活其他应用程序。 当这种情况出现时,当前的活动窗口将停用,并引发 Deactivated 事件。 同样,当用户选择当前停用的窗口时,该窗口会再次变成活动窗口并引发 Activated。

3、关闭窗体

当用户关闭窗口时,窗口的生命便开始走向终结。

  • Close()方法:关闭窗体,并释放窗体的资源
  • Closing事件、Closed事件:关闭时、关闭后引发的事件,通常在Closing事件中提示用户是否退出等信息。

4、窗体的生命周期。如下图。

为了证实上面的结论,我们用下面的代码进行测试:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Shapes;using System.Windows.Threading;namespace WpfApp1{/// <summary>/// WindowThd.xaml 的交互逻辑/// </summary>public partial class WindowThd : Window{public WindowThd(){this.Activated += WindowThd_Activated;this.Closing += WindowThd_Closing;this.ContentRendered += WindowThd_ContentRendered;this.Deactivated += WindowThd_Deactivated;this.Loaded += WindowThd_Loaded;this.Closed += WindowThd_Closed;this.Unloaded += WindowThd_Unloaded;this.SourceInitialized += WindowThd_SourceInitialized;InitializeComponent();}void WindowThd_SourceInitialized(object sender, EventArgs e){Console.WriteLine( "1---SourceInitialized!");}void WindowThd_Unloaded(object sender, RoutedEventArgs e){Console.WriteLine("Unloaded!");}void WindowThd_Closed(object sender, EventArgs e){Console.WriteLine("_Closed!");}void WindowThd_Loaded(object sender, RoutedEventArgs e){Console.WriteLine( "3---Loaded!");}void WindowThd_Deactivated(object sender, EventArgs e){Console.WriteLine("Deactivated!");}void WindowThd_ContentRendered(object sender, EventArgs e){Console.WriteLine("ContentRendered!");}void WindowThd_Closing(object sender, System.ComponentModel.CancelEventArgs e){Console.WriteLine("---Closing!");}void WindowThd_Activated(object sender, EventArgs e){Console.WriteLine("2---Activated!");}private void ModifyUI(){// 模拟一些工作正在进行
Thread.Sleep(TimeSpan.FromSeconds(2));//lblHello.Content = "欢迎你光临WPF的世界,Dispatcher";this.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate(){lblHello.Content = "欢迎你光临WPF的世界,Dispatche  同步方法 !!";});}private void btnThd_Click(object sender, RoutedEventArgs e){Thread thread = new Thread(ModifyUI);thread.Start();}private void btnAppBeginInvoke_Click(object sender, RoutedEventArgs e){new Thread(() =>{Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal,new Action(() =>{Thread.Sleep(TimeSpan.FromSeconds(2));this.lblHello.Content = "欢迎你光临WPF的世界,Dispatche 异步方法!!"+ DateTime.Now.ToString();}));}).Start();}}}

打开窗体的事件执行顺序为:如下图。

三、关闭窗体的事件执行顺序为:如下图。

转载于:https://www.cnblogs.com/Im-Victor/p/10571322.html

WPF窗体的生命周期相关推荐

  1. WPF messagebox生命周期的探讨

    WPF messagebox生命周期的探讨 wpf中messagebox默认要依赖于其他window窗口,如果再app.xaml.cs中还未创建其他任何窗口的情况下使用messagebox.show( ...

  2. 关于IssueVision命令模式中对象生命周期的困惑

    在IssueVision的命令模式中有如下代码(\Patterns\Commander.cs)   public static void Connect(ToolBarButton button, C ...

  3. winform生命周期(备忘)

    最近遇到关于winform生命周期上的问题,然后在网上找了一下,如下: 1,窗体启动时: Control.HandleCreated Control.BindingContextChanged For ...

  4. Activity具体解释(生命周期、以各种方式启动Activity、状态保存,全然退出等)...

    一.什么是Activity? 简单的说:Activity就是布满整个窗体或者悬浮于其它窗体上的交互界面.在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一个主的Ac ...

  5. ASP.NET服务器控件的生命周期分析

    本文实例分析了ASP.NET服务器控件的生命周期.分享给大家供大家参考.具体如下: (1)初始化----在此阶段中,主要完成两项工作:一.初始化在传入Web请求生命周期内所需的设置:二.跟踪视图状态. ...

  6. asp.net 页面全生命周期

    .Net 托管代码和非托管代码的区别 后台代码隐藏/显示前台控件 .Net 页面生命周期 2012-03-21 13:31:08|  分类: .NET |  标签:.net  页面生命周期  c#  ...

  7. Activity详细解释(生命周期、以各种方式启动Activity、状态保存,等完全退出)...

    一.什么是Activity? 简单的说:Activity或者悬浮于其它窗体上的交互界面. 在一个应用程序中通常由多个Activity构成.都会在Manifest.xml中指定一个主的Activity, ...

  8. ASP.NET页面揭秘之页面生命周期

    首先简单介绍下Page类. 在.NET Framework中,Page类提供了ASP.NET应用程序从.aspx文件开始创建的所有对象的基本行为.Page类在System.Web.UI命名空间中定义, ...

  9. 服务器控件生命周期简介

    服务器控件生命周期简介 服务器控件的生命周期是创建服务器控件最重要的概念.作为开发人员,必须对服务器控件生命周期深刻理解.当然,这不是一朝一夕就可以做到的.对于学习控件开发技术的初学者,可以不必掌握得 ...

最新文章

  1. 笛卡尔积 php,PHP自定义函数生成笛卡尔积
  2. memcached 双主复制
  3. 每次重启需要source /etc/profile的原因-环境变量
  4. Akka编写一个RPC框架,模拟多个Worker连接Master的情况的案例
  5. ns2相关学习——TCL脚本编写(3)
  6. win10创建新账户_win10系统卸载自带应用软件的操作方法
  7. 写了4年博客,我终于也出了一本书。
  8. qt 多重继承_C++多继承(多重继承)详解
  9. quartz问题记录-missed their scheduled fire-time
  10. excel vba 字典使用方法学习
  11. Python爬虫之爬取网站图片
  12. (20)雅思屠鸭第二十天:雅思听力part1中各种场景词的总结
  13. c语言编程绘制空间螺旋线,阿基米德螺旋线
  14. 深度学习:GCN(图卷积神经网络)理论学习总结
  15. Flutter高仿微信-第51篇-群聊-修改群名
  16. MFC ODBC数据库操作编程(二)
  17. #力扣 LeetCode1646. 获取生成数组中的最大值 @FDDLC
  18. Python 数据结构 之 串 的链式存储结构
  19. AVFI Carla安装踩坑记录
  20. Unity开发元宇宙多人交互XR应用

热门文章

  1. oracle习题-emp表查询练习
  2. js this指向分析
  3. php 更新配置文件
  4. 如何用 JavaScript 下载文件
  5. 编程语言_Java方法参数...是什么意思_面试题008
  6. MyCat分布式数据库集群架构工作笔记0012---高可用_Mycat双主双从复制原理
  7. springcloud工作笔记097---idea集成Mapper接口点击后自动跳转到对应的xml文件中
  8. Linux学习笔记004----CentOS7 提升普通用户权限到Root权限
  9. C++ 多线程 atomic
  10. 一叶知秋:“安全“的野指针、 static函数、成员函数、this 指针、gcc编译器、name mangling