一、Application介绍

WPF中的Application对象用来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只有一个 Application 实例存在。WPF Application默认由两部分组成 : App.xaml 和 App.xaml.cs,这有点类似于 Asp.Net WebForm,将定义和行为代码相分离。

微软把WPF中经常使用的功能都封装在 Application 类中了。 Application 类具体有以下功能:

  • 跟踪应用程序的生存期并与之交互。
  • 检索和处理命令行参数。
  • 检测和响应未经处理的异常。
  • 共享应用程序范围的属性和资源。
  • 管理独立应用程序中的窗口。
  • 跟踪和管理导航

二、Applicaion应用

1、在Visual Studio 2015中创建一个“WPF应用程序”,使用App.xaml文件定义启动应用程序。

项目中的每个WPF窗口(xaml),包含2个文件:xaml和xaml.cs

项目文件(WpfApplication.csproj)中有对应的描述节点:<Page>和<Compile>,而<ApplicationDefinition>节点有的话只能有一个,用来定义启动项。

<ItemGroup><ApplicationDefinition Include="App.xaml"><SubType>Designer</SubType><Generator>MSBuild:Compile</Generator></ApplicationDefinition><Compile Include="App.xaml.cs"><DependentUpon>App.xaml</DependentUpon><SubType>Code</SubType></Compile><Page Include="MainWindow.xaml"><Generator>MSBuild:Compile</Generator><SubType>Designer</SubType></Page><Compile Include="MainWindow.xaml.cs"><DependentUpon>MainWindow.xaml</DependentUpon><SubType>Code</SubType></Compile></ItemGroup>

2、也可以自己定义一个Main方法来实现WPF应用程序的启动。

第一步:在“解决方案资源管理器”中选中App.xaml文件,右键“从项目中排除”。

此时,Visual Studio自动会改变WPF项目文件(WpfApplication.csproj),去掉了<ItemGroup>中的<ApplicationDefinition>节点和<Compile>节点

<ItemGroup><ApplicationDefinition Include="App.xaml"><SubType>Designer</SubType><Generator>MSBuild:Compile</Generator></ApplicationDefinition><Compile Include="App.xaml.cs"><DependentUpon>App.xaml</DependentUpon><SubType>Code</SubType></Compile>
</ItemGroup>

若后面又要将App.xaml文件“包括在项目中”来作为WPF应用启动,F5运行时会报错误“不包含适合于入口点的静态‘Main’方法”。这个错误是由于Visual Studio把项目文件(*.csproj)中原来自动生成的app.xaml相关的定义进行了修改(上面已说明)。

添加App.xaml进来后,项目文件(*.csproj)自动会生成如下代码:

<ItemGroup><Page Include="App.xaml"><SubType>Designer</SubType><Generator>MSBuild:Compile</Generator></Page><Compile Include="App.xaml.cs"><DependentUpon>App.xaml</DependentUpon></Compile></ItemGroup>

第一段代码中App.xaml在项目文件里面用ApplicationDefinition标签定义。第二段代码中App.xaml在项目文件里面用Page标签定义,这种定义是指App.xaml只是一个页面而已。因此,只需要把项目文件中将App.xaml的配置由Page修改成ApplicationDefinition即可。

第二步:现在中添加一个新类,类名为App.cs。

可以写入以下三种方法启动WPF。

class App{[STAThread]static void Main(){f1();}static void f1(){// 定义Application对象作为整个应用程序入口Application app = new Application();MainWindow win = new MainWindow();//ShutdownMode选项,注意这个设置必须要写在app.Run()方法之前app.ShutdownMode = ShutdownMode.OnMainWindowClose; //非必须//调用Run方法app.Run(win);}static void f2(){// 定义Application对象作为整个应用程序入口Application app = new Application();MainWindow win = new MainWindow();//是必须的,否则无法显示窗体win.Show();//指定Application对象的MainWindow属性为启动窗体,然后调用无参数的Run方法app.MainWindow = win;app.Run();}static void f3(){// 定义Application对象作为整个应用程序入口Application app = new Application();// 通过Url的方式启动app.StartupUri = new Uri("MainWindow.xaml", UriKind.Relative);app.Run();}}

三、WPF应用程序的关闭

WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序才停止运行。 ShutDown 是隐式或显式发生,可以通过指定 ShutdownMode 的属性值来进行设置。

方式一:如上面写在代码里

方式二:写在App.xaml里

<Application x:Class="WpfApplication1.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApplication1"StartupUri="MainWindow.xaml" ShutdownMode="OnExplicitShutdown"><Application.Resources></Application.Resources>
</Application>

四、Application对象事件

1、第一种方式,在App.xaml文件添加事件,如Activated事件(当应用程序成为前台应用程序时触发)

此方法也可以在Visual Studio(ide)中的App.xaml属性窗口(按F4)中设置。

<Application x:Class="WpfApplication1.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApplication1"StartupUri="MainWindow.xaml" ShutdownMode="OnExplicitShutdown" Activated="Application_Activated"><Application.Resources></Application.Resources>
</Application>

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

namespace WpfApplication1
{/// <summary>/// App.xaml 的交互逻辑/// </summary>public partial class App : Application{private void Application_Activated(object sender, EventArgs e){}}
}

2、第二种方式,定义一个App类写Main方法和其他事件等。

namespace WpfApplication1
{class App{[STAThread]static void Main(){f1();}static void f1(){// 定义Application对象作为整个应用程序入口Application app = new Application();MainWindow win = new MainWindow();//ShutdownMode选项,注意这个设置必须要写在app.Run()方法之前app.ShutdownMode = ShutdownMode.OnMainWindowClose;//调用Run方法app.Run(win);app.Activated += App_Activated;}static void App_Activated(object sender, EventArgs e){throw new NotImplementedException();}}
}

五、WPF应用程序生存周期

WPF应用程序的生命周期与执行顺序,用MSDN上的一张图片进行说明。

Application介绍相关推荐

  1. WPF入门教程系列三——Application介绍(续)

    接上文WPF入门教程系列二--Application介绍,我们继续来学习Application 三.WPF应用程序的关闭 WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序 ...

  2. WPF教程(二)--Application WPF程序启动方式

    1.Application介绍 WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只有一个 Application 实 ...

  3. 【达内课程】Application

    文章目录 Application 介绍 方法介绍 应用场景 具体使用 总结 Application 介绍 Application 和 Activity.Service 一样是 Android 框架的一 ...

  4. Jerry的Fiori原创文章合集

    我曾经于2014年10月到2016年5月工作于SAP CRM Fiori应用的开发团队, 我所在的团队负责下列这8个Fiori应用的维护和持续开发: My Opportunities My Tasks ...

  5. anthor copy from interview

    点击跳转:http://www.apkbus.com/home.php?mod=space&do=blog&uid=88452&id=52994点击打开链接 注:帖子来自安卓巴 ...

  6. linux系统如何使用qq,Linux_ubuntu系统怎么安装qq并登录?,使用linux操作系统,qq是必不可 - phpStudy...

    ubuntu系统怎么安装qq并登录? 使用linux操作系统,qq是必不可少的软件,如果不喜欢使用webQQ,那么就要安装qq软件了,具体方法如下. 1.打开浏览器,搜索wineqq安装包,ubunt ...

  7. linux cacti监控tomcat,Cacti监控Tomcat服务器实现过程

    1 首先去官网上面下载通用的监控模板 一般使用TomcatStats-0.1.zip 模板居多,下载地址: , 在linux服务器上面使用wget下载,wget,报如下错误: 正在连接 forums. ...

  8. WPF入门学习----系列基础教程

    WPF入门教程系列目录 WPF入门教程系列二--Application介绍 WPF入门教程系列三--Application介绍(续) WPF入门教程系列四--Dispatcher介绍 WPF入门教程系 ...

  9. 一些大公司面试题整理

    腾讯面试题 1.int a = 1; int result = a+++3<<2; 2.int a = 2; int result = (a++ > 2)?(++a):(a+=3); ...

最新文章

  1. bpython ipython_安装ipython后命令找不到ipython bpython -bash: *python: command not found
  2. RabbitMQ学习系列(二): RabbitMQ安装与配置
  3. 如何区分数据科学家,数据工程师与数据分析师
  4. mysql数据抽取_史上最简单的数据抽取
  5. c++ 代码_C|函数调用约定与堆栈平衡的汇编代码分析
  6. matlab 读取mdf文件路径,从 MDF 文件中读取数据
  7. 中国最牛天使投资人:30万元投资,回报超50000倍
  8. java十进制转二进制(输入一个十进制数将其转换成二进制)
  9. python爬取推特图片_twitter图片视频批量下载
  10. [运放滤波器]3_反相同相比例放大电路_Multisim电路仿真
  11. win10计算机休眠快捷键,让win10电脑快速进入休眠快捷键是什么-
  12. RT-Thread 软件定时器(学习笔记)
  13. c语言符号运算优先级6,c语言运算符号的优先级
  14. 全球及中国浆液阀行业市场深度分析及发展战略咨询报告2022-2028年
  15. OC中的非正式协议与正式协议的区别
  16. npm install 报错 gyp info it worked if it ends with ok npm ERR! gyp verb cli [
  17. 如何解决微信公众号开发转发接口,分享出去是链接不是卡片
  18. <学习笔记> VBA_Line list_01
  19. 软件测试面试如何写出HR青睐的简历?
  20. 博途PLC1200/1500PLC S型速度曲线变频器控制应用(SCL完整源代码)

热门文章

  1. 为什么hashcode的算法要用31作为乘子
  2. macbook调整键盘背光
  3. linux下使用sed 命令来删除指定行
  4. hadoop fs -ls后出现No such file or directory解决
  5. AG9310MFQ设计方案|AG9310电路参考|USB Type C 转HDMI内置SPI
  6. 用英语卖二手计算机,2019年5月英语四级口语考试真题:卖旧电脑
  7. 股市量化接口都有哪些?
  8. Mac OS系统APP软件推荐
  9. 爱,请在来得及的时候说出口
  10. Windows下Nginx和php-cgi的bat批处理快速启动方法