WPF基础——Application

使用App.xaml文件定义启动应用程序,使用App.xaml文件定义启动应用程序

一、Application介绍

一、Application介绍

WPF中的Application对象用来拓展局地大局的一言一动和操作,并且每一个 Domain (应用程序域)中仅且唯有八个 Application 实例存在。WPF Application暗中同意由两有的组成 : App.xaml 和 App.xaml.cs,这有点类似于 Asp.Net WebForm,将定义和行事代码相分离。

WPF中的Application对象用来进展部分大局的一言一动和操作,并且每种 Domain (应用程序域)中仅且唯有四个 Application 实例存在。WPF Application私下认可由两片段组成 : App.xaml 和 App.xaml.cs,那有点类似于 Asp.Net WebForm,将概念和行事代码相分离。

微软把WPF中时常选拔的效能都封装在 Application 类中了。 Application 类具体有以下功用: 

微软把WPF中经常应用的效果都封装在 Application 类中了。 Application 类具体有以下职能: 

  • 盯住应用程序的生存期并与之互相。 
  • 搜寻和拍卖命令行参数。 
  • 质量评定和响应未经处理的卓殊。 
  • 共享应用程序范围的性质和财富。 
  • 管理独立应用程序中的窗口。 
  • 跟踪和治本导航。 
  • 跟踪应用程序的生存期并与之并行。 
  • 检索和处理命令行参数。 
  • 检查测试和响应未经处理的拾叁分。 
  • 共享应用程序范围的性质和财富。 
  • 治本独立应用程序中的窗口。 
  • 跟踪和管制导航。 

二、Applicaion应用

二、Applicaion应用

一、在Visual Studio 2016中创制一个“WPF应用程序”,使用App.xaml文件定义运行应用程序。

壹、在Visual Studio 2014中创制贰个“WPF应用程序”,使用App.xaml文件定义运维应用程序。

项目中的每一种WPF窗口(xaml),包涵3个文本:xaml和xaml.cs

品类中的每一种WPF窗口(xaml),包涵二个公文:xaml和xaml.cs

图片 1

图片 2

种类文件(WpfApplication.csproj)中有相应的描述节点:<Page>和<Compile>,而<ApplicationDefinition>节点有的话只可以有2个,用来定义运转项。

品类文件(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>
  <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>

二、也得以自身定义1个Main方法来促成WPF应用程序的开发银行。

贰、也足以自个儿定义贰个Main方法来落实WPF应用程序的开发银行。

先是步:在“消除方案财富管理器”中选中App.xaml文件,右键“从类型中消除”。

先是步:在“消除方案能源管理器”中选中App.xaml文件,右键“从类型中清除”。

那时候,Visual Studio自动会改变WPF项目文件(WpfApplication.csproj),去掉了<ItemGroup>中的<ApplicationDefinition>节点和<Compile>节点

那时,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>
<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文件“蕴含在档次中”来作为WPF应用运转,F伍运营时会报错误“不包括适合于入口点的静态‘Main’方法”。这一个破绽百出是由于Visual
Studio把项目文件(*.csproj)中原发源动生成的app.xaml相关的概念实行了修改(上面已证实)。

添加App.xaml进来后,项目文件(*.csproj)自动会变动如下代码:

添加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>
  <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.xaml在类型文件之中用ApplicationDefinition标签定义。第三段代码中App.xaml在品种文件之中用Page标签定义,那种概念是指App.xaml只是二个页面而已。因而,只要求把项目文件司令员App.xaml的配备由Page修改成ApplicationDefinition即可。

第一步:未来中添加三个新类,类名称叫App.cs。

其次步:现在中添加1个新类,类名称为App.cs。

能够写入以下二种艺术运营WPF。 

能够写入以下两种办法运行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();
        }
    }
    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应用程序的关闭

WPF应用程序的倒闭唯有在应用程序的 Shutdown
方法被调用时,应用程序才打住运作。 ShutDown
是隐式或显式发生,能够透过点名 ShutdownMode 的属性值来开始展览设置。

WPF应用程序的闭馆唯有在应用程序的 Shutdown
方法被调用时,应用程序才止住运作。 ShutDown
是隐式或显式发生,能够经过点名 ShutdownMode 的属性值来展开设置。

方法1:如下面写在代码里

主意壹:如下面写在代码里

方式二:写在App.xaml里

方式二:写在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 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>

4、Application对象事件

四、Application对象事件

壹、第二种办法,在App.xaml文件添加事件,如Activated事件(当应用程序成为前台应用程序时接触)

1、第2种艺术,在App.xaml文件添加事件,如Activated事件(当应用程序成为前台应用程序时接触)

此措施也能够在Visual Studio(ide)中的App.xaml属性窗口(按F四)中装置。

此措施也得以在Visual Studio(ide)中的App.xaml属性窗口(按F四)中设置。

<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>
<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文件的代码如下:

在App.xaml.cs文件的代码如下:

namespace WpfApplication1
{
    /// <summary>
    /// App.xaml 的交互逻辑
    /// </summary>
    public partial class App : Application
    {
        private void Application_Activated(object sender, EventArgs e)
        {

        }
    }
}
namespace WpfApplication1
{
    /// <summary>
    /// App.xaml 的交互逻辑
    /// </summary>
    public partial class App : Application
    {
        private void Application_Activated(object sender, EventArgs e)
        {

        }
    }
}

2、第二种艺术,定义2个App类写Main方法和别的事件等。

二、第一种艺术,定义3个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();
        }
    }
}
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();
        }
    }
}

5、WPF应用程序生存周期

5、WPF应用程序生存周期

WPF应用程序的生命周期与实施顺序,用MSDN上的一张图片展开认证。

WPF应用程序的生命周期与执行顺序,用MSDN上的一张图片进行认证。

图片 3

图片 4

Continue…

Continue…