【WPF系列】- Application详解

news/2024/5/20 0:33:40 标签: wpf, .netcore, 后端

【WPF系列】- Application详解

文章目录

  • 【WPF系列】- Application详解
    • 一、Application简介
      • Application 类具体有以下功能:
    • 二、初始App.xaml
    • 二、自定义Main方法启动WPF应用程序
      • 第一种:启动应用程序的代码
      • 第二种:启动应用程序的代码
      • 第三种:启动应用程序的代码
    • 三、Application属性
    • 四、Application方法
    • 五、Application事件
    • 六、Application总结

一、Application简介

WPF和WinForm很相似,WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只有一个 Application 实例存在。和 WinForm 不同的是WPF Application默认由两部分组成 : App.xaml 和 App.xaml.cs,这有点类似于 Asp.Net WebForm,将定义和行为代码相分离。

Application 类具体有以下功能:

  1. 跟踪应用程序的生存期并与之交互。
  2. 检索和处理命令行参数。
  3. 检测和响应未经处理的异常。
  4. 共享应用程序范围的属性和资源。
  5. 管理独立应用程序中的窗口。
  6. 跟踪和管理导航。

二、初始App.xaml

使用Visual Studio创建一个WPF应用程序,使用App.xaml文件启动应用程序。XAML并不是严格的XML格式的文件,它是一种DSL语言,它所有的定义都会由编译器最后编译成代码。

App.xaml文件

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

App.xaml.cs文件

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace _010_WPF_Demo
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
    }
}

App类继承Application。Application实现单一实例模式,以提供对窗口,属性和资源范围服务的共享访问。因此,每个AppDomain只能创建一个Application实例。

也可以使用标记、标记和代码隐藏或代码实现Application。如使用Application标记实现,则必须将标记文件配置为MICROSOFT生成引擎(MSBuild)ApplicationDefinition项。

独立应用程序不需要 Application 对象;可以在不创建 实例Application的情况下 (Main) 实现自定义static入口点方法以打开窗口。

二、自定义Main方法启动WPF应用程序

首先在项目中排除App.xaml文件。操作步骤:鼠标右键,弹出“弹出菜单 -> 从项目中排除,然后创建启动文件App.cs,并在App.cs类中添加Main方法

  • 第一种:启动应用程序的代码

[STAThread]
private static void Main()
{
     Application app = new Application();
     MainWindow main=new MainWindow();
     app.Run(main);
}
  • 第二种:启动应用程序的代码

[STAThread]
private static void Main()
{
     Application app = new Application();
     MainWindow main=new MainWindow();
     app.MainWindow= main;
     main.ShowDialog();
     app.Run();
}
  • 第三种:启动应用程序的代码

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

以上三种方法都可以使用代码启动一个WPF应用程序。

三、Application属性

序号属性名说明
1Current获取当前Application的AppDomain对象
2Dispatcher获取与此Dispatcher关联的DispatcherObject。
3MainWindow获取或设置应用程序的主窗口
4Properties获取应用程序范围属性的集合
5ResourceAssembly获取或设置 , Assembly 它为 WPF 应用程序中的资源提供包统一资源标识符 (URI) 。
6Resource获取或设置应用程序范围资源(如样式和画笔)的集合。
7ShutdownMode获取或设置导致调用 Shutdown() 方法的条件
8StartupUri获取或设置在应用程序启动时自动显示的 UI。
9Windows获取应用程序中的实例化窗口。

四、Application方法

序号方法名说明
1CheckAccess()确定调用线程是否可以访问此DispatcherObject。(继承自DispatcherObject)
2Equals(Object)确定指定对象是否等于当前对象。
3FindResource(Object)使用指定的键搜索用户界面(UI)资源(如Style或Brush),如果找不到请求的资源,则引发异常
4GetContentStream(Uri)返回位于指定Uri的内容数据文件的资源流。
4GetCookie(Uri)为由Uri指定的位置检索Cookie。
5GetHashCode()作为默认哈希函数
6GetRemoteStream(Uri)返回位于指定Uri的源站点数据文件的资源流
7GetResourceStream(Uri)返回位于指定Uri的资源数据文件的资源流
8GetType()获取当前实例的Type
9LoadComponent(Object,Uri)加载位于指定统一资源标识符的XAML文件(URI), 并将其转换为由XAML文件的根元素指定的对象的实例。
10LoadComponent(Uri)加载位于指定统一资源标识符的XAML文件(URI),并将其转换为由XAML文件的根元素指定的对象的实例。
11MemberwiseClone()创建当前Object的浅表副本
12OnActivated(EventArgs)引发Activated事件
13OnDeactivated(EventArgs)引发Deactivated事件
14OnExit(ExitEventArgs)引发Exit事件
15OnFragmentNavigation (FragmentNavigationEventArgs)引发FragmentNavigation事件
16OnLoadCompleted (NavigationEventArgs)引发 LoadCompleted 事件。
17OnNavigated (NavigationEventArgs)引发 Navigated 事件。
18OnNavigationFailed (NavigationFailedEventArgs)引发 NavigationFailed事件
19OnNavigationProgress (NavigationProgressEventArgs)引发 NavigationProgress 事件。
20OnNavigationStopped (NavigationEventArgs)引发 NavigationStopped 事件。
21OnSessionEnding (SessionEndingCancelEventArgs)引发 SessionEnding事件
22OnStartup(StartupEventArgs)引发 Startup 事件。
23Run()启动 Windows Presentation Foundation 应用程序。
24Run(Window)启动 Windows Presentation Foundation 应用程序并打开指定窗口。
25SetCookie(Uri,String)为由 Uri指定的位置创建一个 Cookie。
26Shutdown()关闭一个应用程序
27Shutdown(Int32)关闭将指定退出代码返回给操作系统的应用程序。
28ToString()返回表示当前对象的字符串
29TryFindResource(Object)搜索指定资源。
30VerifyAccess()强制调用线程具有此DispatcherObject的访问权限。

五、Application事件

序号事件名说明
1Activated当应用程序成为前台应用程序时发生。
2Deactivated当应用程序停止作为前台应用程序时发生。
3DispatcherUnHandledException在异常由应用程序引发但未进行处理时发生。
4Exit在应用程序关闭且无法取消之前发生
5FragmentNavigation当应用程序中的导航器开始导航到内容片段时发生;如果所需片段位于当前内容中,则导航将立即发生;如果所需片段位于不同内容中,则加载源 XAML 内容后,将立即发生导航。
6LoadCompleted在已经加载、分析并开始呈现应用程序中的导航器导航到的内容时发生
7Navigated在已经找到应用程序中的导航器要导航到的内容时发生,尽管此时该内容可能尚未完成加载。
8Navigating在应用程序中的导航器请求新导航时发生。
9NavigationFailed在应用程序中的导航器在导航到所请求内容时出现错误的情况下发生。
10NavigationProgress在由应用程序中的导航器管理的下载过程中定期发生,以提供导航进度信息。
11NavigationStopped在调用应用程序中的导航器的 StopLoading方法时发生,或者当导航器在当前导航正在进行期间请求了一个新导航时发生。
12SessionEnding当用户通过注销或关闭操作系统来结束 Windows 会话时发生。
13StartUp在调用Run()对象的Application方法时发生

六、Application总结

Application是封装WPF应用程序特定功能的类,实现单一实例模式,以提高对其窗口,属性和资源范围服务的共享访问,因此,每个WPF的AppDomain只是创建类的Application一个实例。Application可以通过使用标记、标记和代码隐藏或代码实现Application。


http://www.niftyadmin.cn/n/5149995.html

相关文章

安卓沉浸状态栏下 PreferenceFragment 弹出的输入对话框无法跟随键盘上移的解决办法

背景介绍 在不沉浸状态栏时&#xff0c;当PreferenceFragmentCompat中有EditTextPreference时&#xff0c;点击该条目呼出的输入对话框将跟随键盘上移&#xff0c;但一旦在styles.xml中设置 <item name"android:windowTranslucentStatus">true</item> …

【Orangepi Zero2 全志H616】资料及环境搭建

点击跳转 点击跳转 点击跳转 点击跳转 点击跳转 点击跳转 跳转到此处 跳转到此处 跳转到此处 跳转到此处 跳转到此处 跳转到此处 官网资料下载 GitHub&#xff1a;新版本的 orangepi-build 源码 环境搭建&#xff1a;新手配置教程 打开 MobaXterm &#xff0c;单击左上的图标…

软考高项-IT部分

信息化体系 信息化技术应用:龙头 信息资源:核心任务 信息网络:应用基础 信息技术和产业:建设基础 信息化人才:成功之本 信息化法规:保障 信息化趋势 产业信息化、产品信息化、社会生活信息化、国民经济信息化 新型基础设施建设 2018年召开的中央经济工作会议,首…

友提:2023年小学生古诗文大会今天(11月4日)截止,请及时参赛

根据小学生古诗文大会方案和通知&#xff0c;2023第八届上海小学生古诗文大会暨古诗文“桂冠少年”选拔活动初选答题时间为10月21日开始到11月4日结束。 即到今天晚上23点59分就结束初选答题&#xff0c;请各位家长和孩子们准时参赛&#xff0c;必要的时候设置闹钟。 一、如何…

学习与科学研究总决

前言 学习方法&#xff0c;做学问之道历来为人重视。 学习的一般方法 看书&#xff1a;课本阅读&#xff0c;查相关资料、论文&#xff0c;都是摄取的形式&#xff0c;是一个知识输入的过程。笔记&#xff1a;课堂笔记&#xff0c;读书笔记&#xff0c;写博客&#xff0c;发…

React Hook 初学者最常犯的几个错误

useState 和 useRef 函数使用上的权衡 首先我们先来看一个简单的例子&#xff0c;具体代码如下 const [email, setEmail] useState<string>(""); const [password, setPassword] useState<string>("");function onSubmit(e: FormEvent) {e…

如何用维格云搭建和一键训练你的钧瓷AI机器人?

大禹智库 第69期(总第400期) 2023年11月4日 如何用维格云搭建和一键训练你的钧瓷AI机器人? 钧瓷私有数据聊天机器人是一种能够根据预设的数据集进行智能对话的机器人。通过维格云,我们可以轻松地搭建自己的钧瓷私有数据聊天机器人。本文将以钧道机器人为例,详细介绍如何…

EMC Unity存储系统如何查看SSD的使用寿命

为什么要写这个博客&#xff1f; 客户对老的EMC unity的存储系统要扩容&#xff0c;如何确定SSD磁盘是全新的还是拆机二手的&#xff1f;很多时候客户还有一个奇葩的要求&#xff0c;就是要和5年前的磁盘PN一致&#xff0c;甚至要求固件版本一致&#xff0c;最关键的还要求是全…