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,来把定时器 ...
随机推荐
- 利用T4模板生成ASP.NET Core控制器的构造函数和参数
前言 在ASP.NET Core中引入了DI,并且通过构造函数注入参数,控制器中会大量使用DI注入各种的配置参数,如果配置注入的参数比较多,而且各个控制器需要的配置参数都基本一样的话,那么不断重复的复 ...
- 利用chrome调试JavaScript代码
看见网上很多人问怎么用chrome调试JavaScript代码,我也对这个问题抱着疑问,但是没有找到一篇能用的中文文章(可能我的google有问题),也不知道怎么点出一篇E文的,感觉作者写得不错,所以 ...
- C#调用Java方法(详细实例)
C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用 ...
- 使用Toast的setText()实现倒计时
点击按钮发送短信以后,倒计时3秒钟后退出Activity.本来想用弹出多个Toast的方法实现,后来发现效果不好,因为Toast.LENGTH_LONG显示3秒钟,Toast.LENGTH_SHORT ...
- 【Java每日一题】201612015
package Dec2016; import java.util.HashSet; public class Ques1205 { public static void main(String[] ...
- hibernate----component-entity (人-地址-学校)
package com.ij34.dao; import javax.persistence.*; @Entity @Table(name="school_inf") public ...
- hibernate简单注释(一)
*****************************hibernate.cfg.xml************************************ <?xml version= ...
- Maven依赖Scope标签用法
在一个maven项目中,如果存在编译需要而发布不需要的jar包,可以用scope标签,值设为provided.如下: <dependency> <groupId ...
- 实用的Scala泛函编程
既然谈到实用编程,就应该不单止了解试试一个新的编程语言那么简单了,最好通过实际的开发项目实例来演示如何编程.心目中已经有了一些设想:想用Scala泛函编程搞一个开源的数据平台应用系统,也就是在云平台P ...
- mysql登录时闪退的问题
之前mysql用着好着,可是今天在启动mysql后输入密码出现了闪退,在任务管理器中发现mysql服务没有启动,当手动启动时提示拒绝访问.在网上查找原因发现问题所在. 问题原因:mysql服务没有安装 ...