WPF学习之路(七)应用程序和窗口
手动创建应用程序
1.创建Empty Project

2.添加引用

3.添加 ManualApp.cs 并添加下面的代码
[STAThread]
public static void Main()
{
Window win = new Window();
win.Title = "Manually created application";
win.Show();
Application app = new Application();
app.Run();
}
[STAThread] 单线程模型
4.执行该程序会多出现一个控制台窗口,可以修改Project的Output Type

通过向导创建应用程序
Main函数实现在 \obj\Debug\App.g.cs中
应用程序的生命周期
Application开始Run以后,进入消息循环,不断响应并处理事件
应用程序入口
应用程序入口都是Main函数,两种主要类型的对象Application\Window,前者在全局中是唯一的可以通过Application.Current获取。
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
public static void Main() {
Alex_WPFAPPDemo04.App app = new Alex_WPFAPPDemo04.App();
app.InitializeComponent();
app.Run();
}
应用程序起点
第一个响应的事件是Startup
App.xaml中默认使用下面的方式
<Application x:Class="Alex_WPFAPPDemo04.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="Application_StartUp">
稍作修改,会最先进入到Application_StartUp事件处理方法
<Application x:Class="Alex_WPFAPPDemo04.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="Application_StartUp">
应用程序的状态
应用程序有两种状态,Actived/Deactived,WPF可以通过Actived/Deactived事件来处理这两种状态
<Application x:Class="Alex_WPFAPPDemo04.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml"
Activated="Application_Actived"
Deactivated="Application_Deactived">
应用程序的异常
<Application x:Class="Alex_WPFAPPDemo04.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml"
DispatcherUnhandledException="Application_DispatcherUnhandledException">
当应用程序发生异常时,会触发DispatcherUnhandledException事件,实现该事件处理逻辑可以防止程序崩溃
非正常退出
当操作系统关机、重启、注销等操作时,应用程序会接受SessionEnding事件,通过设置Cancel属性可以组织操作系统的关机、重启、注销等操作
<Application x:Class="Alex_WPFAPPDemo04.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml"
SessionEnding="Application_SessionEnding">
private void Application_SessionEnding(object sender, SessionEndingCancelEventArgs e)
{
string msg = string.Format("{0}. End Session?", e.ReasonSessionEnding);
MessageBoxResult result = MessageBox.Show(msg, "Session Ending", MessageBoxButton.YesNo);
if (result == MessageBoxResult.No)
{
e.Cancel = true;
}
}
正常退出
当关闭应用程序主窗口、所有窗口、显示调用Shutdown函数时,程序会正常退出
这3种情况由ShutdownMode属性决定
// Summary:
// Specifies how an application will shutdown. Used by the System.Windows.Application.ShutdownMode
// property.
public enum ShutdownMode
{
// Summary:
// An application shuts down when either the last window closes, or System.Windows.Application.Shutdown()
// is called.
OnLastWindowClose = ,
//
// Summary:
// An application shuts down when either the main window closes, or System.Windows.Application.Shutdown()
// is called.
OnMainWindowClose = ,
//
// Summary:
// An application shuts down only when System.Windows.Application.Shutdown()
// is called.
OnExplicitShutdown = ,
}
Shutdown函数有两种形式,不传任何参数、传入Int作为ExitCode
To be continue...
WPF学习之路(七)应用程序和窗口的更多相关文章
- WPF学习之路初识
WPF学习之路初识 WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...
- WPF学习之路(一) 初识WPF
参考<葵花宝典-WPF自学手册> VS2012 先创建第一个WPF小程序 1.创建WPF程序 2.查看Solution,WPF中xaml文件和cs文件经常成对出现 两个主要的类:APP(W ...
- WPF学习之路(七)应用程序和窗口(续)
窗口的生命周期 WPF中一个Window类代表一个窗口 一个的窗口的生命周期也有好几个阶段: 1.构造器被调用 2.Window.Initialized事件被触发 3.Window.Activated ...
- WPF学习之路(十二)控件(Items控件)
ListBox 提供了一个选项列表,可以固定或者动态绑定 <StackPanel> <GroupBox Margin="> <GroupBox.Header& ...
- WPF学习之路(九)导航和页面(续)
生命周期 如果Page1成功导航到Page2,首先会触发NavigationService的Navigating事件,标识导航开始.随后创建Page2对象,并且触发NavigationProgress ...
- WPF学习之路(八)页面
传统的应用程序中有两类应用程序模式:桌面应用,Web应用.WPF的导航应用程序模糊了这两类应用程序的界限的第三类应用程序 WPF导航表现为两种形式,一是将导航内容寄宿于窗口,二是XAML浏览器应用程序 ...
- WPF学习之路(六)Command
在WPF中,命令绑定机制是相比于事件更高级的概念,把应用程序的功能划分为多个任务,任务由多种途径触发. 应用Command Binding使代码更符合MVVM模式(Model-View-ViewMod ...
- WPF学习之路(二) XAML
在WPF中引入了XAML语言,主要用于界面设计,业务逻辑则使用C#实现后台代码,将界面设计与业务逻辑分离 XAML是一种声明式语言,类似XML\HTML 示例: <!--Start Tag--& ...
- zigbee学习之路(七):定时器3(中断方式)
一.前言 上次我们学习了了用定时器3进行查询方式来进行溢出判断,今天我们来换一种方式,用中断方式来检测和查询定时器3的溢出. 二.原理与分析 要使用定时器3,我们必须先要配置的是T3CTL,来把定时器 ...
随机推荐
- 为什么我不建议你做APP?
最近迷上了新产品的可行性分析和推演. 有几个朋友也准备跳入创业火坑了,找到我说帮忙做做产品分析和可行性讨论,欣然应允. 我一向厌恶纯凭感觉拍脑袋的方式,所以对于我不了解的行业,都会从行业背景.现状痛点 ...
- Extjs 回车查询
listeners: { afterRender: function (thisForm, options) { this.keyNav = Ext.create('Ext.util.KeyNav', ...
- SSH框架执行自己定义的SQL语句
直接上代码 String hsql = "delete XTable x where x.Userid= ?"; Query query = this.getSession().c ...
- 最新微信公众平台js sdk整合PHP版
由于没有持续关注微信公众平台相关的开发,所以看到这个东西时,都没有耐心看完开发文档,或者不知道重点. 重点在哪呢?重点在示例代码:http://mp.weixin.qq.com/wiki/7/aaa1 ...
- 在spring中使用webservice(Restful风格)
我们一般都会用webservice来做远程调用,大概有两种方式,其中一种方式rest风格的简单明了. 记录下来作为笔记: 开发服务端: 具体的语法就不讲什么了,这个网上太多了,而且只要看一下代码基本上 ...
- JQuery实现对勾事件代码
1.JQuery选择器中使用变量实现动态选择解决方案: <table> <tr> <th>用户名</th> <th>状态</th ...
- winform 固定splitContainer某一部分大小
处于布局省事考虑,通常会用splitcontainer进行总体的布局,例如: 默认情况下,splitcontainer在运行时会根据上下文自动调整每个panel的大小,但大部分情况下,其实我们希望左边 ...
- 使用Bower作为Web包管理器
Bower是一个简单易用的Web包管理器,通过它我们可以非常简便的安装各种Web框架和库,同时它也负责管理不同包之间的关系依赖. 安装Bower Bower需要 npm 和 Git 的支持,在安装Bo ...
- 使用虚拟按钮(Ghost Buttons)的25个网站
2014年已经过去大半年了,我们看到网页设计领域出现新的设计趋势. 虚拟按钮(Ghost Buttons)是指具备基本的按钮形状的透明按钮,但有细实线的边框.有些虚拟钮是互动的,点击之后按钮可能会成为 ...
- 12款免费的 WordPress 响应式主题下载
最流行的内容管理系统(WordPress)和最流行的网页设计技术(响应式设计)结合会是什么样的呢?下面这个列表收集了12款响应式的 Wordpress 主题,能够带给你不一样的网站体验. 您可能感兴趣 ...