<h1>Application介绍 - <span class="color_h1">(二)</span></h1><p> WPF和WinForm 很相似, WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只有一个 Application 实例存在。和 WinForm 不同的是WPF Application默认由两部分组成 : App.xaml 和 App.xaml.cs,这有点类似于 Asp.Net WebForm,将定义和行为代码相分离。</p><p><br/></p><p>微软把WPF中经常使用的功能都封装在 Application 类中了。 Application 类具体有以下功能: </p><p> 1、跟踪应用程序的生存期并与之交互。 </p><p> 2、检索和处理命令行参数。 </p><p> 3、检测和响应未经处理的异常。 </p><p> 4、共享应用程序范围的属性和资源。 </p><p> 5、管理独立应用程序中的窗口。 </p><p> 6、跟踪和管理导航。</p><p><br/></p><p>Application对象的其他属性:</p><p> Current:获取当前 AppDomain的 Application 对象。</p><p> Dispatcher:获取与此 DispatcherObject 关联的 Dispatcher。 (继承自 DispatcherObject。)</p><p> MainWindow:获取或设置应用程序的主窗口。</p><p> Properties:获取应用程序范围的属性集合。</p><p> ResourceAssembly:获取或设置对于 WPF 应用程序的资源提供已装箱统一资源标识符 (URI) 的 Assembly 。</p><p> Resources:获取或设置应用程序范围资源的集合,例如样式和画笔。</p><p> ShutdownMode:获取或设置会导致 Shutdown 方法调用的情况。</p><p> StartupUri:获取或设置自动显示的 UI ,当应用程序启动时。</p><p> Windows:获取在应用程序中实例化窗口。</p><p><br/></p><p>添加Application对象事件:</p><p> Activated:当应用程序成为前台应用程序时触发。</p><p> Deactivated:当应用程序不再是前台应用程序时触发。</p><p> DispatcherUnhandledException:如果异常是由应用程序引发,但未处理,触发。</p><p> Exit:在应用程序关闭之前,触发,而且不能撤消。</p><p> FragmentNavigation:发生在应用程序的一个浏览器启动导航到内容片段导航时,会立即发生,如果所需片段在当前目录,或者,在源 XAML 目录加载后,如果所需片段在其他内容。</p><p> LoadCompleted:在导航到在应用程序中的一个浏览器的目录加载的分析完成并已呈现时触发。</p><p> Navigated:当导航到在应用程序中使用的浏览器已找到的内容时触发,这时它可能还没有完成加载。</p><p> Navigating:在一个新的导航由应用程序,一个浏览器请求发生。</p><p> NavigationFailed:出现问题,则错误,当应用程序的一个浏览器导航到所请求的内容时。</p><p> NavigationProgress:定期发生在应用程序中使用浏览器管理提供导航进度信息的下载过程。</p><p> NavigationStopped:发生在一个浏览器的 StopLoading 方法在应用程序的调用,或者,如果新的导航由浏览器请求,在当前导航正在进行的。</p><p> SessionEnding:当用户在注销或关闭操作系统关闭 Windows 会话时发生。</p><p> Startup:当 Application 对象的 Run 方法调用,发生</p><p><br/></p><p> 在应用程序中添加事件,我发现App.xaml的属性里面根本没有添加事件的方法,只能在MainWindow.xaml里面加。所以说,要想在App.xaml里面添加事件,也只能手动修改App.xaml的代码了。。。</p><p><br/></p><h1 style="font-size: 16px;font-weight:bold">WPF应用程序的启动</h1><p> 关于如何在Visual Studio中创建一个“WPF应用程序”,前面的文章中已经说过了。请参见<a target="_blank" href="/Course?Id=13§ion=2">新建WPF工程</a></p><p> 在Visual Studio 2019中创建一个“WPF应用程序”,使用App.xaml文件定义启动应用程序。XAML从严格意义上说并不是一个纯粹的 XML 格式文件,它更像是一种 DSL(Domain Specific Language,领域特定语言),它的所有定义都会由编译器最后编译成代码。App.xaml文件默认内容如下图:</p><p><img class="pimg" src="/upload/image/020952308499578.png"/></p><p><br/></p><p> 当然,如果你习惯了把启动写在代码中。你也可以跟WinForm中一样,在类中定义一个Main方法来实现对WPF应用程序的启动。</p><p> 第一步:如下图,在“解决方案资源管理器”中使用鼠标左键选中App.xaml文件,然后鼠标右键,弹出“弹出菜单—》从项目中排除”,这样就在项目中去掉了我们刚才建立的App.xaml文件。</p><p><img class="pimg" src="/upload/image/QQ截图20210920102419.jpg"/></p><p><br/></p><p> 第二步:现在中添加一个新类,类名为App.cs。如下图。在“解决方案资源管理器”中使用鼠标左键选中“WpfApp”项目,然后点击鼠标右键,弹出“弹出菜单”,按下图中所示操作。</p><p><img class="pimg" src="/upload/image/QQ截图20210920102652.jpg"/></p><p> </p><p> 第三步:在弹出的“添加新项”界面中,选中“类”,把名称修改为“App.cs”。如下图。</p><p><img class="pimg" src="/upload/image/QQ截图20210920102920.jpg"/></p><p><br/></p><p> 第四步:在“解决方案资源管理器”中双击App.cs(如下图),打开文件,然后可以分别写入以下三种方式的代码,进行启动效果的调试。</p><p> </p><h1 style="font-size: 16px;font-weight:bold">第一种启动应用程序的代码</h1><pre style="overflow-x:auto;font-size: 15px;" class="brush:c#;toolbar:false;">using System;
using System.Windows;
namespace WpfApp
{
class App
{
[STAThread] // 这个一定要加
static void Main()
{
// 定义Application对象作为整个应用程序入口
Application app = new Application();
// 方法一:调用Run方法 ,这种方式跟winform的调用一样
MainWindow win = new MainWindow();
app.Run(win);
}
}
}</pre><p><br/></p><h1 style="font-size: 16px;font-weight:bold">第二种启动应用程序的代码</h1><pre style="overflow-x:auto;font-size: 15px;" class="brush:c#;toolbar:false;">using System;
using System.Windows;
namespace WpfApp
{
class App
{
[STAThread] // 这个一定要加
static void Main()
{
// 定义Application对象作为整个应用程序入口
Application app = new Application();
//指定Application对象的MainWindow属性为启动窗体,然后调用无参数的Run方法
MainWindow win = new MainWindow();
app.MainWindow = win;
//是必须的,否则无法显示窗体
win.Show();
app.Run();
}
}
}</pre><p><br/></p><h1 style="font-size: 16px;font-weight:bold">第三种启动应用程序的代码</h1><pre style="overflow-x:auto;font-size: 15px;" class="brush:c#;toolbar:false;">using System;
using System.Windows;
namespace WpfApp
{
class App
{
[STAThread] // 这个一定要加
static void Main()
{
// 定义Application对象作为整个应用程序入口
Application app = new Application();
// 通过Url的方式启动
app.StartupUri = new Uri("MainWindow.xaml", UriKind.Relative);
app.Run();
}
}
}</pre><p><br/></p><p>上面的方法,最后执行的效果,如下图:</p><p><img class="pimg" src="/upload/image/QQ截图20210920104031.jpg"/></p>
Application介绍 - (二) WPF和WinForm 很相似, WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只有一个 Application 实例存在。和 WinForm 不同的是WPF Application默认由两部分组成 : App.xaml 和 App.xaml.cs,这有点类似于 Asp.Net WebForm,将定义和行为代码相分离。
微软把WPF中经常使用的功能都封装在 Application 类中了。 Application 类具体有以下功能:
1、跟踪应用程序的生存期并与之交互。
2、检索和处理命令行参数。
3、检测和响应未经处理的异常。
4、共享应用程序范围的属性和资源。
5、管理独立应用程序中的窗口。
6、跟踪和管理导航。
Application对象的其他属性:
Current:获取当前 AppDomain的 Application 对象。
Dispatcher:获取与此 DispatcherObject 关联的 Dispatcher。 (继承自 DispatcherObject。)
MainWindow:获取或设置应用程序的主窗口。
Properties:获取应用程序范围的属性集合。
ResourceAssembly:获取或设置对于 WPF 应用程序的资源提供已装箱统一资源标识符 (URI) 的 Assembly 。
Resources:获取或设置应用程序范围资源的集合,例如样式和画笔。
ShutdownMode:获取或设置会导致 Shutdown 方法调用的情况。
StartupUri:获取或设置自动显示的 UI ,当应用程序启动时。
Windows:获取在应用程序中实例化窗口。
添加Application对象事件:
Activated:当应用程序成为前台应用程序时触发。
Deactivated:当应用程序不再是前台应用程序时触发。
DispatcherUnhandledException:如果异常是由应用程序引发,但未处理,触发。
Exit:在应用程序关闭之前,触发,而且不能撤消。
FragmentNavigation:发生在应用程序的一个浏览器启动导航到内容片段导航时,会立即发生,如果所需片段在当前目录,或者,在源 XAML 目录加载后,如果所需片段在其他内容。
LoadCompleted:在导航到在应用程序中的一个浏览器的目录加载的分析完成并已呈现时触发。
Navigated:当导航到在应用程序中使用的浏览器已找到的内容时触发,这时它可能还没有完成加载。
Navigating:在一个新的导航由应用程序,一个浏览器请求发生。
NavigationFailed:出现问题,则错误,当应用程序的一个浏览器导航到所请求的内容时。
NavigationProgress:定期发生在应用程序中使用浏览器管理提供导航进度信息的下载过程。
NavigationStopped:发生在一个浏览器的 StopLoading 方法在应用程序的调用,或者,如果新的导航由浏览器请求,在当前导航正在进行的。
SessionEnding:当用户在注销或关闭操作系统关闭 Windows 会话时发生。
Startup:当 Application 对象的 Run 方法调用,发生
在应用程序中添加事件,我发现App.xaml的属性里面根本没有添加事件的方法,只能在MainWindow.xaml里面加。所以说,要想在App.xaml里面添加事件,也只能手动修改App.xaml的代码了。。。
WPF应用程序的启动 关于如何在Visual Studio中创建一个“WPF应用程序”,前面的文章中已经说过了。请参见新建WPF工程
在Visual Studio 2019中创建一个“WPF应用程序”,使用App.xaml文件定义启动应用程序。XAML从严格意义上说并不是一个纯粹的 XML 格式文件,它更像是一种 DSL(Domain Specific Language,领域特定语言),它的所有定义都会由编译器最后编译成代码。App.xaml文件默认内容如下图:
当然,如果你习惯了把启动写在代码中。你也可以跟WinForm中一样,在类中定义一个Main方法来实现对WPF应用程序的启动。
第一步:如下图,在“解决方案资源管理器”中使用鼠标左键选中App.xaml文件,然后鼠标右键,弹出“弹出菜单—》从项目中排除”,这样就在项目中去掉了我们刚才建立的App.xaml文件。
第二步:现在中添加一个新类,类名为App.cs。如下图。在“解决方案资源管理器”中使用鼠标左键选中“WpfApp”项目,然后点击鼠标右键,弹出“弹出菜单”,按下图中所示操作。
第三步:在弹出的“添加新项”界面中,选中“类”,把名称修改为“App.cs”。如下图。
第四步:在“解决方案资源管理器”中双击App.cs(如下图),打开文件,然后可以分别写入以下三种方式的代码,进行启动效果的调试。
第一种启动应用程序的代码 using System;
using System.Windows;
namespace WpfApp
{
class App
{
[STAThread] // 这个一定要加
static void Main()
{
// 定义Application对象作为整个应用程序入口
Application app = new Application();
// 方法一:调用Run方法 ,这种方式跟winform的调用一样
MainWindow win = new MainWindow();
app.Run(win);
}
}
}
第二种启动应用程序的代码 using System;
using System.Windows;
namespace WpfApp
{
class App
{
[STAThread] // 这个一定要加
static void Main()
{
// 定义Application对象作为整个应用程序入口
Application app = new Application();
//指定Application对象的MainWindow属性为启动窗体,然后调用无参数的Run方法
MainWindow win = new MainWindow();
app.MainWindow = win;
//是必须的,否则无法显示窗体
win.Show();
app.Run();
}
}
}
第三种启动应用程序的代码 using System;
using System.Windows;
namespace WpfApp
{
class App
{
[STAThread] // 这个一定要加
static void Main()
{
// 定义Application对象作为整个应用程序入口
Application app = new Application();
// 通过Url的方式启动
app.StartupUri = new Uri("MainWindow.xaml", UriKind.Relative);
app.Run();
}
}
}
上面的方法,最后执行的效果,如下图: