zoukankan      html  css  js  c++  java
  • 2000条你应知的WPF小姿势 基础篇<28-33 WPF启动故事>

      在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师。最为出色的是他维护了两个博客:2,000Things You Should Know About C#  和 2,000 Things You Should Know About WPF 。他以类似微博式的150字简短语言来每天更新一条WPF和C#重要又容易被遗忘的知识。Follow他的博客也有一段日子了,很希望能够分享给大家。

      本系列我不仅会翻译他的每一个tip,也会加入自己开发之中的看法和见解。本系列我希望自己也能和他一样坚持下来,每天的进步才能促成伟大。

      在这里郑重说明.该系列是基于Sean Sexton先生的英文博客, Sean Sexton拥有全部版权和撤销权利。

      前文:<1-7> , <8-14>,<15-21>,<22-27>

      [小九的学堂,致力于以平凡的语言描述不平凡的技术。如要转载,请注明来源:小九的学堂cnblogs.com/xfuture]


      #28 WPF入口

      对于使用VS新项目创建方式创建的WPF独立应用程序,该程序的入口是定义在App.g.cs(自动生成的代码)的Main方法。在默认的项目配置里,是 public static void App.Main(), 是一个静态方法。

      一般来说,一个.net程序的入口是在在其入口类的Main函数,如果一个项目中拥有多个静态的Main方法,则需要在项目属性中配置入口的类。在启动对象下拉框,选择包含Main函数的类,作为启动时调用的类。

      

      

      #29 在WPF Main()中发生的故事

      当你使用VS创建了一个WPF独立程序的时候,VS会自动生成一个继承自System.Windows.Application的App类,里面包含了入口的Main()静态函数。这是定义:public partial class App : Application

      在Main()函数中,应用程序通过以下三步来进行启动:

      1. 创建一个Application的实例

      2. 调用Application.InitializeComponent方法来构建整个应用。

      3. 调用Application.Run方法来启动应用。

      代码如下:

      

    public static void Main()
    {
        WpfApplication.App app = new WpfApplication.App();
        app.InitializeComponent();
        app.Run();
    }

      

      #30 单例

      

      System.Application类是单例,意味着你最多在一个WPF Application中创建一个Application的实例,如果你创建了第二个Application的实例,程序就会抛出InvalidOperationException异常。

      你可以通过静态属性Application.Current来访问当前的Application类。或者使用派生的App类,App.Current

      #31 两种创建WPF控件的方式

      在WPF中你可以通过以下两种方式来创建控件:

      1. 编程的方式:使用C# code

      2. 声明式:使用XAML来声明控件

      举个例子: 程序启动需要指定起始的Window。

      代码方式:

      

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        MainWindow win = new MainWindow();
        win.Show();
    }

      Xaml:

      

    <Application x:Class="WpfApplication.App"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        StartupUri="MainWindow.xaml">
        <Application.Resources>
        </Application.Resources>
    </Application>

      两种最终实现的效果相同,打开了MainWindow。

      

      #32 WPF生命周期

      WPF Startup Event处理的函数中可以得到传递来的命令行参数并且进行处理。

      命令行的参数可以在StartupEventArgs.Args找到。args是传入的命令行参数的string 数组。

      代码如下:

      

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        foreach (string s in e.Args)
        {
            MessageBox.Show(string.Format("Arg: {0}", s));
        }
    }

      其实一般做法是重写其OnStartup方法来代替其startupevent handler

    protected override void OnStart(string[] args) { }

      

      #33 监听Windows会话

      当一个用户关闭Windows或者机器的时候,WPF可以监听到其事件并可以发出警告。事件名称为Application.SessionEnding,在用户注销和关机时触发。

      通过设置SessionEndingCancelEventArgs.Cancel 为true,可以阻止其注销/关机行为:

      

    private void Application_SessionEnding(object sender, SessionEndingCancelEventArgs e)
    {
       MessageBoxResult res = MessageBox.Show("Exiting Windows will terminate this app.  Are you sure?", "End Session", MessageBoxButton.YesNo);
       if (res == MessageBoxResult.No)
       {
           e.Cancel = true;
       }

      需要注意的是,这个事件是windows停止时触发,并不是该WPF应用程序关闭时触发。

      在Win7以上系统,如果你的应用取消了SessionEnding的事件,Windows会通知你你的应用程序阻止了其关机:

      

      

      后篇会对WPF内部机制继续做探索,敬请关注!

      如果觉得有帮助,右下角赞一下吧~ (* *)

  • 相关阅读:
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 15—Anomaly Detection异常检测
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 14—Dimensionality Reduction 降维
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 13—Clustering 聚类
    【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 12—Support Vector Machines 支持向量机
    【原】机器学习公开课 目录(课程笔记、测验习题答案、编程作业源码)...持续更新...
    【原】Coursera—Andrew Ng机器学习—Week 11 习题—Photo OCR
    【原】Coursera—Andrew Ng机器学习—Week 10 习题—大规模机器学习
    【原】Coursera—Andrew Ng机器学习—Week 9 习题—异常检测
    【原】Coursera—Andrew Ng机器学习—Week 8 习题—聚类 和 降维
    【原】Coursera—Andrew Ng机器学习—Week 7 习题—支持向量机SVM
  • 原文地址:https://www.cnblogs.com/xfuture/p/3781426.html
Copyright © 2011-2022 走看看