- Application.ShutdownMode属性:通过,只要有一个窗口还没有关闭,Application类就保持应用程序处于有效状态,如果这不是所期望的行为,就可以调整该属性。
- 应用程序事件
Application提供了为数不多的几个非常有用的事件,如下图所示:
有两种选择用于处理事件:在XAML中使用事件特性的方式关联事件处理程序,或重写相应的受保护方法,当重写应用程序方法时,推荐首先调用基类的实现,通常,基类的实现只是引发相应的应用程序事件。 - 初始界面(SplashScreen)
WPF应用程序的运行速度快,但不可能在瞬间启动。当第一次启动应用程序时,会有一些延迟,因为公共语言运行时首先需要初始化.Net环境,然后启动应用程序。这一延迟不见得会成为问题,通常,只需要经过很短的时间,就会出现第一个窗口。但是,如果具有更加耗时的初始化步骤,或者如果只是希望通过显示一个打开的图形使应用程序显得更加专业,此时,就可以使用WPF提供的简单的初始界面特性。下面是添加初始界面的方法:
1) 为项目添加一个图像文件。
2) 把此图像文件的生成操作设置为SplashScreen
下次运行应用程序时,该图形会立即在屏幕*显示出来,一旦准备好了运行时环境,并且Application_Startup方法执行完毕,应用程序的第一个窗口显示出来,这时初始界面图形会很快的逐渐消失(大约300毫米).
我们可以自己编写初始界面的显示逻辑来改变初始界面褪去的速度,为此,需要向SplashScreen.Show()方法传递false,然后通过调用SplashScreen.Close()方法且可以提供一个TimeSpan值指示经过多长时间淡出初始界面。 - 处理命令行参数
为了处理命令行参数,需要响应Application.Startup事件,命令行参数是通过StartupEventArgs.Args属性作为字符串数组提供的。例如,假定希望加载一个文档,文档的名称作为命令行参数传递,在这种情况下,就有必要读取命令行参数并进行所需要的一些额外的初始化操作,在下面的示例中,通过响应Application.Startup事件实现了这一模式,在该示例中没有在任何地方设置Application.StartupUri属性,而是使用代码实例化主窗口。public partial class App : Application { // The command-line argument is set through the Visual Studio // project properties (the Debug tab). private void App_Startup(object sender, StartupEventArgs e) { // At this point, the main window has been created but not shown. FileViewer win = new FileViewer(); if (e.Args.Length > 0) { string file = e.Args[0]; if (File.Exists(file)) { // Configure the main window. win.LoadFile(file); } } // This window will automatically be set as the Application.MainWindow. win.Show(); } }
- 访问当前Application对象
通过静态的Application.Current属性,可以在应用程序的任何位置获取当前应用程序实例。
在一个窗口中可以检查Application.Windows集合的内容,这个集合提供了所有当前打开窗口的引用。 - 在窗口这间进行交互
在应用程序类中我们可以添加代码来保存重要窗口的引用,从而使一个窗口可以访问另一个窗口。例如,假设希望跟踪应用程序使用的所有文档窗口,可以在自定义的应用程序类中创建一个专门的集合。下面是一个使用泛型列表集合保存一组自定义窗口对象的示例。在这个示例中,每个文档窗口由一个名为Document的类的实例表示:public partial class App : Application { private List<Document> documents = new List<Document>(); public List<Document> Documents { get { return documents; } set { documents = value; } } }
现在,当创建一个新文档时,只需要记住把它添加到Documents集合中即可。下面是响应一个按钮单击事件的事件处理程序,创建一个新文档的同时把它添加到Documents集合中,同样,也可以在Document类中响应Window.Loaded这类事件,以确保当创建文档对象时,总会在Documents集合中注册该文档对象。
private void cmdCreate_Click(object sender, RoutedEventArgs e) { Document doc = new Document(); doc.Owner = this; doc.Show(); ((App)Application.Current).Documents.Add(doc); }
现在可以在代码中的其他任何地方使用集合来遍历所有文档,在这个示例中,Document类包含了一个自定义的用于更新显示的SetContent()方法:
private void cmdUpdate_Click(object sender, RoutedEventArgs e) { foreach (Document doc in ((App)Application.Current).Documents) { doc.SetContent("Refreshed at " + DateTime.Now.ToLongTimeString() + "."); } }
相关文章
- 01-03实验六 多线程编程 1.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。
- 01-03WPF 类与类之间的访问方式
- 01-03WPF如何将xaml.cs窗口逻辑分离为单独的类
- 01-03wpf程序热键的一个类
- 01-03WPF Application 类介绍以及怎样修改启动方式
- 01-03计算机图形学(六):1. Triangle类,以及Ray Triangle的求交,画出一个红红的三角形来
- 01-03Springcloud学习笔记34--文件存储信息新增功能(post方式提交,@RequestBody注解接收raw格式的application/json,JsonUtil工具类)
- 01-03学习爬虫之Scrapy框架学习(六)--1.直接使用scrapy;使用scrapy管道;使用scrapy的媒体管道类进行猫咪图片存储。媒体管道类学习。自建媒体管道类存储图片
- 01-03六,WPF的Application类
- 01-03C++类的六大函数--构造、析构、拷贝构造、移动构造、拷贝赋值、移动赋值