服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - 通过App.xaml理解wpf中的Application类

通过App.xaml理解wpf中的Application类

2022-11-09 14:22杜文龙 C#

这篇文章主要介绍了通过App.xaml理解wpf中的Application类,帮助大家更好的理解和学习使用c# wpf,感兴趣的朋友可以了解下

  这个章节来了解Application类,我考虑了一晚上决定跳过控件类相关的学习,因为控件如果只是入门的话每个控件F12跳过去看一下属性、事件就能大致了解的差不多,而且控件比较多,每个都这样看一遍,感觉意义不大。同时控件的使用一般又同时包含了,资源、样式、触发器、模板、绑定、列表控件的话,可能还包含列表虚拟化和数据虚拟化。所以想了一下。打算先讲Application类。

  教程的第一篇我们从hello world开始了解什么是程序。它是如何编译、生成和运行的。现在这一个篇从App.xaml讲解Application类中能包含哪些东西,。这个Application类有哪些应用场景。

App.xaml 里包含什么

我们新创建一个WPF的程序,默认什么代码也不改动的情况下双击程序代码中的App.xaml。我们看到如下代码:

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

通过App.xaml理解wpf中的Application类

我们就讲这些里面一部分常用的,剩下的建议以我们同样的分析思路,去观察一下其他的。

1)首先我们看程序启动后的第一步。通过OnStartUp()方法做启动参数检查。
我们通过OnStartUp()方法的重写来区分不同启动参数,可以让程序干很多不同的事情,我们打开任务管理器=》Name列右键点击=》勾选显示Command line,位置如下:

通过App.xaml理解wpf中的Application类

通过App.xaml理解wpf中的Application类

这样我们就可以看到当前很多其他程序,都是由启动参数的,启动参数按空格分割,有的程序会有一组参数,所以对我们来说,启动参数同样也是很重要的东西。不管是单例,还是让程序启动不同的功能,启动参数就是软件功能解耦的第一步。

我们找到上上个截图的OnStartup方法,我们在App.xaml.cs里重写他,代码如下,并在解决方案下的程序集右键=》属性=》左侧列表选择调试=》命令行参数这里添加对应的调试参数,我们这里设置用空格分割一句话,这样我们就可以调试了,F5启动。

通过App.xaml理解wpf中的Application类

using System.Text;
using System.Windows;

namespace ApplicationLifeCycle
{
/// <summary>
/// App.xaml 的交互逻辑
/// </summary>
public partial class App : Application
{ 

  protected override void OnStartup(StartupEventArgs e)
  {
    base.OnStartup(e); 
    StringBuilder sb = new StringBuilder();
    foreach (var item in e.Args)
    {
      sb.Append(item);
    } 
    MessageBox.Show($"args length as {e.Args.Length},args content as {sb.ToString()}");
   
  }
}
}

通过App.xaml理解wpf中的Application类

我们看到了参数是4行,内容是-hello duwenong Mastery C#。这样我们通过重写OnStartup就可以实现参数对不同的参数做不同的处理。

2)用户注销,但是程序正在处理关键任务,通过重写OnSessionEnding()来提示当前工作尚未结束。
我们通过重写OnSessionEnding()可以在重要工作没做完但是,用户选择关机、重启或注销电脑时提示用户我们有任务尚未结束。

private bool _unsavedData = false;
  public bool UnsavedData
  {
    get { return _unsavedData; }
    set
    {
      _unsavedData = value;
    }
  }

  protected override void OnSessionEnding(SessionEndingCancelEventArgs e)
  {
    base.OnSessionEnding(e);
    //假设某些线程未完成保存,把UnsaveData设置为True
    UnsavedData = true;
    if (UnsavedData)
    {
      e.Cancel = true;
      MessageBox.Show($"我们的数据尚未保存完毕,{e.ReasonSessionEnding} 将丢失数据。");
    }
  }

3)默认启动那个Window窗体。我们使用StartupUri设置可以修改默认启动的Window窗体。

通过App.xaml理解wpf中的Application类

这样启动的就是我们新创建的Window1.

4)通过ShutdownMode修改程序默认的关闭方式。

通过App.xaml理解wpf中的Application类

1.OnExplicitShutdown 这个方法比较特殊,他是除非通过代码调用了Application.Shutdown()方法,否则即使所有窗口都关闭了,程序仍然驻留再后台。
2.OnLastWindowClose 这个是默认的值,只要至少有一个窗口存在,应用程序就保持运行状态,但是注意如果关闭了主窗口,MainWindow扔就指向当时的窗体,需要代码切换MainWindow到其他窗体
3.OnMainWindowClose 这个是只要主窗体还处于打开状态,应用程序就保持运行,如果主窗体关闭进程就退出。

5)使用Application.Current访问当前Application的实例

private void GetCurrentWindowListButton_Click(object sender, RoutedEventArgs e)
  {
    Window mainWindow = Application.Current.MainWindow;
    foreach (var item in Application.Current.Windows)
    {
      var    }

  }

我们使用代码获取当前打开的所有window的标题。

Application的属性和方法目前就写这么多,其他的大家可以自己F12看一下并尝试写一下代码,资源和资源的查找虽然也是Application下的。但是我觉得这点要要出来单独讲,所以就不写在这里啦。

以上就是通过App.xaml理解wpf中的Application类的详细内容,更多关于理解wpf中的Application类的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/duwenlong/p/14603158.html

延伸 · 阅读

精彩推荐
  • C#在winform下实现左右布局多窗口界面的方法之续篇

    在winform下实现左右布局多窗口界面的方法之续篇

    这篇文章主要介绍了在winform下实现左右布局多窗口界面的方法之续篇 的相关资料,需要的朋友可以参考下...

    梦在旅途6582021-11-14
  • C#C#打印PDF文档的10种方法(小结)

    C#打印PDF文档的10种方法(小结)

    这篇文章主要介绍了C#打印PDF文档的10种方法(小结),可分多种情况来进行,如设置静默打印、指定打印页码范围和打印纸张大小、双面打印、黑白打印等等...

    E-iceblue10482022-07-20
  • C#一种c#深拷贝方式完胜java深拷贝(实现上的对比分析)

    一种c#深拷贝方式完胜java深拷贝(实现上的对比分析)

    下面小编就为大家带来一篇一种c#深拷贝方式完胜java深拷贝(实现上的对比分析)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小...

    C#教程网3792021-11-30
  • C#C#利用反射技术实现去掉按钮选中时的边框效果

    C#利用反射技术实现去掉按钮选中时的边框效果

    这篇文章主要介绍了C#利用反射技术实现去掉按钮选中时的边框效果,涉及C#针对窗口的参数设置技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    我心依旧3652021-10-25
  • C#C# 对象映射的高性能方案

    C# 对象映射的高性能方案

    这篇文章主要介绍了C# 对象映射的高性能方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,有需要的朋友可以...

    乌龟会哲_Program4972022-10-24
  • C#C#控制台应用程序中输出彩色字体

    C#控制台应用程序中输出彩色字体

    这篇文章主要为大家详细介绍了C#控制台应用程序中输出彩色字体的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    雲霏霏8672022-01-06
  • C#C# 利用代理爬虫网页的实现方法

    C# 利用代理爬虫网页的实现方法

    这篇文章主要介绍了C# 利用代理爬网页的实现方法的相关资料,希望通过本能帮助到大家实现这样的功能,需要的朋友可以参考下...

    mimvp6152022-01-24
  • C#C#实现带进度条的ListView

    C#实现带进度条的ListView

    这篇文章主要介绍了C#实现带进度条的ListView 的相关资料,需要的朋友可以参考下...

    小月8482021-11-12