博客园WPF Application类

所有的WPF程序,都是由Application类实例创建,该类负责打开当前应用程序和窗体,并且决定如何关闭应用程序等。Application类的主要功能可以简单总结以下几点:

1、保持主线程

使用Application后,只要有窗体没有退出,则应用程序不会退出,他会重新定义出新的主窗体,只有所有的窗体都关闭,Appliction才决定是否退出应用程序。Application起到管理所有窗体的作用。看如下代码:

class Program
{
     [STAThread()]
     static void Main(string[] args)
     {
         Application app = new Application();
         Window win = new Window();
         app.Run(win);
     }
}

效果会开启一个应用程序,假如我们不使用Application ,代码如下:

class Program
{
     [STAThread()]
     static void Main(string[] args)
     {
        Window win = new Window();
         win.ShowDialog();
     }
}

感觉效果上,没有任何差别,但实际上,两个完全不一样,假如我们定义一个MainWindow的类,在这个类中放一个按钮,弹出另外一个窗体,效果会怎么样呢,看如下代码:

class Program
   {
       [STAThread()]
       static void Main(string[] args)
       {
           Application app = new Application();
           Window win = new Window();
           win.MouseDown += Win_MouseDown;
           win.ShowDialog();
           app.Run();
       }
      private static void Win_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
       {
           Window win = new Window();
           win.Show();
       }
   }

当我们关闭父窗体,应用程序并没有退出。如果将Application去掉,编写以下代码:

class Program
    {
        [STAThread()]
        static void Main(string[] args)
        {
            Window win = new Window();
            win.MouseDown += Win_MouseDown;
            win.ShowDialog();
       
        }

       private static void Win_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            Window win = new Window();
            win.Show();
        }
    }

我们关闭父窗体,则整个应用程序退出。

这说明Applicationn在有任何一个窗体存在的情况下,能保证软件的持续运行,保证主线程不退出。

2、启动xaml窗体

我们可以通过指定StartupUri ,来告诉Appliction如何启动窗体,其代码如下:

class Program
{
     [STAThread()]
     static void Main(string[] args)
     {
         Application app = new Application();
         app.StartupUri = new Uri("MainWindow.xaml",System.UriKind.Relative);
         app.Run();
     }
}

所以,我们在编写wpf应用程序的时候,会有一个App.xaml的文件,其就是Appliction的定义,看看其代码如下:

<Application x:Class="Ani.App"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:local="clr-namespace:Ani"
              StartupUri="MainWindow.xaml">
</Application>

也是通过指定StartupUri属性,启动窗体,那Application是如何启动的呢,我们可以在当前程序的obj目录下面,可以看到App.g.cs文件,打开里面的代码,可以看到如下代码:

public partial class App : System.Windows.Application {
     /// <summary>
     /// InitializeComponent
     /// </summary>
     [System.Diagnostics.DebuggerNonUserCodeAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
     public void InitializeComponent() {
         
         #line 5 "..\..\App.xaml"
         this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
         
         #line default
         #line hidden
     }
     /// <summary>
     /// Application Entry Point.
     /// </summary>
     [System.STAThreadAttribute()]
     [System.Diagnostics.DebuggerNonUserCodeAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
     public static void Main() {
         Ani.App app = new Ani.App();
         app.InitializeComponent();
         app.Run();
     }
}

所以WPF应用程序会主动给我们创建一个主程序App.cs和一个App.xaml文件,但App.cs并没有对编辑器放开,我们只需要编辑App.xaml文件即可

3、应用程序的关闭方式

Application里面有一个ShudonwModel属性,这个属性是一个枚举对象,用于指定当前应用程序的关闭方式,其有三个选项。

OnLastWindowClos e默认行为,只要至少一个窗体存在,应用程序就保持运行状态,应用程序会根据窗体的开启循序,自动指定主窗体。
OnMainWindowClose这个是指,只要主窗体(最新开启)存在,应用程序才保持运行状态
OnExplicaitShutdown除非调用Appliction.Shutdown()方法,否则应用程序不会结束。

代码如下:

<Application x:Class="Ani.App"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:local="clr-namespace:Ani"
              StartupUri="MainWindow.xaml" ShutdownMode="OnLastWindowClose">
</Application>

4、应用程序的事件

Application提供了为数不多几个事件,但这几个事件非常有用。

4.1 Startup

这个事件在调用Appliction.Run()方法之前,并且在主窗体显示之前发生,可以使用这个事件读取当前应用程序的命令行参数,而且还示意使用该事件指定StartupUri 属性

4.2 Exit

事件发生在应用程序关闭时(不管是什么原因关闭),并在Run()方法返回之前发生,但此时已经不能取消关闭,但是可以通过Run()方法重新启动程序。

4.3 SessionEnding

该事件在window对话结束时发生,例如,当用户关闭或者注销计算机时,我们来确定是否关闭应用程序,我们可以设置SessionEndingEventArgsCancel属性设置为true来取消关闭应用程序。否则,当事件处理结束后,WPF会调用Application.Shutdown()方法关闭事件。

4.4 Activated

激活当前应用程序的时候调用,当从另外一个应用程序切换到当前应用程序的时候调用,当第一次显示窗体的时候调用

4.5 Deactived

当取消激活应用程序中的窗体的时候,触发该事件。当切换到另外一个应用程序时,调用该事件。

4.6 DispatcherUnhandledException

当应用程序中的任何位置,只要发生未处理的异常,就会发生该事件,使用该事件来记录重要错误。

5、处理命令行参数

为了处理命令行参数,需要响应Application.Startup事件。命令行参数以参数通过StartupEventArgs.Args属性作为字符串数组提供。

public partial class App : Application
{
     private void Application_Startup(object sender, StartupEventArgs e)
     {
         if (e.Args.Length > 0) {

            foreach (var arg in e.Args) {

                Console.WriteLine(arg);
             }
         }
     }
}

6、负责窗体之间的交互

我们可以通过Application的current属性,获取当前的Appliction,也可以通过Application的MainWindow属性,获取当前的主窗体,所以,可以通过Application访问当前的Application里面的数据,同时可以访问主窗体的数据。我们可以将一些全局信息,定义在Application中,那么应用程序在任意位置都可以访问,实现所有窗体互相交互,如下代码:

public partial class App : Application
{
     public List<string> Globals = new List<string>();
    
     private void Application_Startup(object sender, StartupEventArgs e)
     {
         ((App)Application.Current).Globals.Add("hello");
     }
}

转载于:https://www.cnblogs.com/minhost/p/7568259.html

WPF(Windows Presentation Foundation)是微软开发的一种用户界面框架,可以用于开发游戏、应用程序和网站等。工业风按钮是一种在WPF中常见的按钮样式,它的设计灵感来自于工业界的机械装置和控制面板。这种按钮通常具有简洁、直接和功能实用的特点。 工业风按钮在外观上一般采用简洁的方形设计,通常使用浅色或深色背景,以突出按钮的实用性和易于识别。按钮的边缘通常是直角设计,给人一种稳定和坚固的感觉。按钮上常常带有文字或者图标,以便用户能够直观地了解按钮的功能。按钮的触发效果一般是通过鼠标悬停、按下或释放来触发的,这样可以提高用户操作的交互性和体验。 工业风按钮在WPF中的应用非常广泛。在工业领域的软件中,工业风按钮经常用来模拟物理按钮,来控制机器或者设备的开关、启动或停止。在其他型的应用程序中,工业风按钮也常用来实现常见的操作按钮,如确认、取消、保存等。 博客园是一个知名的中文博客平台,许多开发者和技术爱好者在这里交流和分享他们的经验和见解。在博客园的博客文章中,我们经常会看到WPf工业风按钮的讨论和教程,例如如何在WPF中实现工业风按钮的样式和效果,以及如何在应用程序中使用这些按钮来提升用户体验。 总之,WPf工业风按钮是WPF界面设计中一种常见的样式,它的简洁、直接和功能实用的特点使得它在工业领域以及其他应用程序中得到了广泛的应用。在博客园这个知名的博客平台上,你可以找到许多关于WPf工业风按钮的讨论和教程,帮助你更好地理解和运用这种按钮样式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值