zoukankan      html  css  js  c++  java
  • WPF基础——Application

    一、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上的一张图片进行说明。

    Continue...

  • 相关阅读:
    Autho2----完整搭建实例
    详解SpringBoot应用跨域访问解决方案
    微信小程序后端开发流程
    前端必备 Nginx 配置
    后端必备 Nginx 配置
    关于spring boot集成MQTT
    Java 常用IO流操作详解
    spring boot 整合mybatis 的xml版本【包括逆向工程以及分页插件】
    实用 SQL 语句
    整理收集的一些常用java工具类
  • 原文地址:https://www.cnblogs.com/appcx/p/5839005.html
Copyright © 2011-2022 走看看