不以物喜,不以己悲

2.学习Application

2学习Application

Application对象事件

名称 说明
Activated 当应用程序成为前台应用程序时触发
Deactivated 当应用程序不再是前台应用程序时触发
DispatcherUnhandledException 如果异常时由应用程序引发,但未处理时,触发
Exit 在应用程序关闭之前,触发,而且不能撤销
FragmentNavigation 发生在应用程序的一个浏览器启动导航时,会立即发生, 如果所需片段在当前目录,或者在源XAML目录加载后,如果所需片段在其他内容。
LoadCompleted 在导航到在应用程序中的一个浏览器的目录加载的分析完成并已呈现时触发
Navigated 当导航到在应用程序中使用的浏览器已找到的内容时触发,这时它可能还没有完成加载
Navigating 在一个新的导航由应用程序,一个浏览器请求发生时
NavigationFailed 出现问题,则错误,当应用程序的一个浏览器导航到所请求的内容时
navigationProgress 定期发生在应用程序中使用浏览器管理提供导航进度信息的下载过程
NavigationStoped 发生在一个浏览器的StopLoading方法在应用程序的调用,或者,如果新的导航由浏览器请求,在当前导航正在进行的。
SessionEnding 当用户在注销或关闭操作系统关闭Windows会话时发生
Startup 当Application对象的Run方法调用时发生

在应用程序中添加事件

1.在App。xaml中做事件的绑定,在App.xaml.cs文件中添加事件的处理方法

添加完事件之后的app.xaml文件代码如下

<Application x:Class="WpfApp4.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApp4" StartupUri="MainWindow.xaml" ShutdownMode="OnMainWindowClose" Activated="Application_Activated" LoadCompleted="Application_LoadCompleted" Deactivated="Application_Deactivated" DispatcherUnhandledException="Application_DispatcherUnhandledException" Exit="Application_Exit" FragmentNavigation="Application_FragmentNavigation" Navigated="Application_Navigated" Navigating="Application_Navigating" NavigationFailed="Application_NavigationFailed" NavigationProgress="Application_NavigationProgress" NavigationStopped="Application_NavigationStopped" SessionEnding="Application_SessionEnding" Startup="Application_Startup" > <Application.Resources> <p></Application.Resources><br> </application><br>


在App.xaml.cs文件的代码如下



public partial class App : Application
{
private void Application_Activated(object sender, EventArgs e)
{
Record.Add(nameof(this.Application_Activated));
}

private void Application_LoadCompleted(object sender, NavigationEventArgs e)
{
Record.Add(nameof(this.Application_LoadCompleted));
}

private void Application_Deactivated(object sender, EventArgs e)
{
Record.Add(nameof(this.Application_Deactivated));
}

private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
Record.Add(nameof(this.Application_DispatcherUnhandledException));
}

private void Application_Exit(object sender, ExitEventArgs e)
{
Record.Add(nameof(this.Application_Exit));
}

private void Application_FragmentNavigation(object sender, FragmentNavigationEventArgs e)
{
Record.Add(nameof(this.Application_FragmentNavigation));
}

private void Application_Navigated(object sender, NavigationEventArgs e)
{
Record.Add(nameof(this.Application_Navigated));
}

private void Application_Navigating(object sender, NavigatingCancelEventArgs e)
{
Record.Add(nameof(this.Application_Navigating));
}

private void Application_NavigationFailed(object sender, NavigationFailedEventArgs e)
{
Record.Add(nameof(this.Application_NavigationFailed));
}

private void Application_NavigationProgress(object sender, NavigationProgressEventArgs e)
{
Record.Add(nameof(this.Application_NavigationProgress));
}

private void Application_NavigationStopped(object sender, NavigationEventArgs e)
{
Record.Add(nameof(this.Application_NavigationStopped));
}

private void Application_SessionEnding(object sender, SessionEndingCancelEventArgs e)
{
Record.Add(nameof(this.Application_SessionEnding));
}

private void Application_Startup(object sender, StartupEventArgs e)
{
Record.Add(nameof(this.Application_Startup));
}
}


WPF应用程序生存周期




记录执行顺序



  • 2019/5/14 9:43:02:Application_Startup


  • 2019/5/14 9:43:02:Application_Navigating


  • 2019/5/14 9:43:02:Application_Activated


  • 2019/5/14 9:43:03:Application_Deactivated



  • 2019/5/14 9:43:03:Application_Exit



Application属性/方法

  • Application的MainWindow属性存储第一个new出来的Window
  • 设置ShutdownMode的属性值为ShutdownMode.OnLastWindowClose,则关闭主窗体是关闭不了应用程序的,需要关闭所有打开的窗口,每次New 出窗体时,都会往Application的Windows中加入,那么关闭所有窗体,也就是需要关闭Application的Windows属性中的所有窗体。
  • Resources属性存储资源
  • StartupUri用于自动启动一个窗体
  • Properties可以存储全局的一些配置信息
  • GetResourceStream(Uri uriResource);可以获取资源文件,例如添加了一个图片文件,并且设置这个图片的生成操作为Resource。那么就可以使用该静态方法获取到这个图片了。
Uri uri = new Uri("/1.png", UriKind.Relative);
StreamResourceInfo info = Application.GetResourceStream(uri);
string str = info.ContentType;//内容类型
Stream stream = info.Stream;//图片资源流
  • GetContentStream(uri);可以获取内容文件,不过实际这种内容一般都是在应用程序目录里面的,使用File类也可以获取到的。用法:添加一个图片文件,设置生成操作为内容,并且将复制到输出目录设置为始终复制或如果较新则复制。那么使用方法和GetResourceStream类似了。
Uri uri = new Uri("/1.png", UriKind.Relative);
StreamResourceInfo info = Application.GetContentStream(uri);
string str = info.ContentType;//内容类型
Stream stream = info.Stream;//图片资源流
  • GetRemoteStream(uri);也是获取内容,不过它与GetContentStream的差别是,文件属性的生成操作设置为无的时候使用,用法类似。
Uri uri = new Uri("/1.png", UriKind.Relative);
StreamResourceInfo info = Application.GetRemoteStream(uri);
string str = info.ContentType;//内容类型
Stream stream = info.Stream;//图片资源流





posted @ 2019-05-14 09:37  这种人  阅读(257)  评论(0)    收藏  举报