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 = 0,
        //
        // Summary:
        //     An application shuts down when either the main window closes, or System.Windows.Application.Shutdown()
        //     is called.
        OnMainWindowClose = 1,
        //
        // Summary:
        //     An application shuts down only when System.Windows.Application.Shutdown()
        //     is called.
        OnExplicitShutdown = 2,
    }

Shutdown函数有两种形式,不传任何参数、传入Int作为ExitCode

To be continue...

时间: 2024-07-30 00:41:20

WPF学习之路(七)应用程序和窗口的相关文章

Android学习笔记(七)——显示对话框窗口

显示对话框窗口 1.创建Dialog1项目,在activity_main.xml文件中添加一个Button: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:l

WPF学习之路(一) 初识WPF

参考<葵花宝典-WPF自学手册> VS2012 先创建第一个WPF小程序 1.创建WPF程序 2.查看Solution,WPF中xaml文件和cs文件经常成对出现 两个主要的类:APP(WPF主程序) MainWindow(程序主窗口) 3.添加Button和Click事件 MainWindow.xaml <Grid> <Button Content="Hello WPF" Margin="5" Click="Button_C

WPF学习之路(七)应用程序和窗口(续)

窗口的生命周期 WPF中一个Window类代表一个窗口 一个的窗口的生命周期也有好几个阶段: 1.构造器被调用 2.Window.Initialized事件被触发 3.Window.Activated事件被触发 4.Window.Loaded事件被触发 5.Window.ContentRendered事件被触发 6.用户和窗口进行交互(Actived与Deactived状态互相切换) 7.Window.Closing事件被触发 8.Window.Uloaded事件被触发 9.Window.Clo

WPF学习之路(八)页面

传统的应用程序中有两类应用程序模式:桌面应用,Web应用.WPF的导航应用程序模糊了这两类应用程序的界限的第三类应用程序 WPF导航表现为两种形式,一是将导航内容寄宿于窗口,二是XAML浏览器应用程序 四个核心要素:Page\HyperLink\NavigationServices\Journal Page WPF中的Page相比Window来说更加的精简,没有提供一个Show或者是Hide的方法,而是通过链接的方式进行页面切换.一般来说Page不设置自身的大小,因为页面的尺寸由包含它的宿主窗体

WPF学习之路(六)Command

在WPF中,命令绑定机制是相比于事件更高级的概念,把应用程序的功能划分为多个任务,任务由多种途径触发. 应用Command Binding使代码更符合MVVM模式(Model-View-ViewModel),类似于MVC模式(Model-View-Control).这两种模式在以后的BLOG中会有详细的介绍.目的都是为了更好的分离前后台逻辑. 一个简单的Button <Button Content="Button" Click="Button_Click" /

Java学习之路(七)

1:什么是异常?  中断了正常指令流的事件. 异常是一个对象 ,在出现异常时,虚拟机会生成一个异常对象 生成对象的类是由 JDK 提供的 上图解释: Throwable 是所有异常类的基类 Error  是指虚拟机在运行时产生的错误,在出现错误时,虚拟机会关闭 Exception  指异常 RuntimeException   运行时异常(也可称为  uncheck Exception ). e.g : class Test{ public static void main(String arg

Wpf学习之路……

Wpf是 .net中一门做winform的技术,和传统的winform的区别在于: 1.         原来的winform就是拖控件,而wpf的控件都死自己拿标记语言(xaml)来写,类似于web中的html. 2.         开发的模式不一样,winform是mvp事件驱动,比如你得单机刷新按钮,界面的数据才会更新.而wpf是mvvm数据驱动,一旦后台的数据发生了改变,前台界面会自己更新.(初学者不用太纠结这个,先学会怎么用吧.) 两者的优缺点是:winform简单,开发快捷,只需要

WPF学习之路(五) 实例:写字板

写字板实例一 MainWindow.xaml <Window x:Class="Wordpad01.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="WordPad1.0" Height=&qu

WPF学习之路(二) XAML(续)

属性 简单属性 前面用到的Width/Height都是简单属性,其赋值一定要放到双引号里 XAML解析器会根据属性的类型执行隐式转换 与C#的区别 SolidBrush.Color = Colors.AliceBlue; <Button Color = "AliceBlue" /> C#中有的枚举类型可以用(|)运算符组合,在XAML中用(,)分隔 附加属性 附加属性可以用于多个控件,但是在另外一个类中定义的属性,在WPF中常常用于布局 如DockPanel.Dock=&q