当前位置: 首页 > news >正文

【WPF系列】- Application详解

【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。

相关文章:

【WPF系列】- Application详解

【WPF系列】- Application详解 文章目录 【WPF系列】- Application详解一、Application简介Application 类具体有以下功能: 二、初始App.xaml二、自定义Main方法启动WPF应用程序第一种&#xff1a;启动应用程序的代码第二种&#xff1a;启动应用程序的代码第三种&#xff1a;启…...

常见的内置方法:__call__,__getitem__,__iter__,__next__

1.__call__方法 在创建好一个实例后&#xff0c;直接调用一个实例会报错。但使用__call__后&#xff0c;可以让这个实例可以像方法一样被调用&#xff08;就是一个函数后面加个括号的函数调用形式&#xff09; class Person:passp1 Person() p1() # 实例这样无法直接被调…...

python用cv2画图(line, rectangle, text等)

Python做图像图形研究的时候&#xff0c;通常需要画很多辅助几何形状&#xff08;比如bounding box等&#xff09;。基于opencv的几何图形绘制具有易用性&#xff0c;而且天然能和numpy数组交互。 本文总结了几种常用的cv2画几何图形的方法&#xff0c;当一个简易的手册使用&a…...

解决方案中word中分页符的使用

在投标方案中要善于使用“分页符”&#xff0c;尽可能少使用分节符号&#xff0c;没有分页符前&#xff0c;你每次修改你的标书或者文件&#xff0c;增加或者修改内容后。你的格式字段前后都是会发生变化&#xff0c;如何稳定的保证结构呢&#xff0c;那就是分页符的使用&#…...

ubuntu20.04下apache启用php7.4-fpm

默认的apache不解析php文件&#xff1a; 直接安装提示依赖有问题&#xff1a; libapache2-mod-php7.4 : Depends: php7.4-common ( 7.4.3-4ubuntu2.19) but 1:7.4.33-8ubuntu20.04.1deb.sury.org1 is to be installed rootfv-az1492-145:/tmp# sudo apt install libapache2-…...

在 CentOS 服务器上部署 JAR 文件到 Docker 容器

标题&#xff1a;在 CentOS 服务器上部署 JAR 文件到 Docker 容器的详细步骤 步骤 1: 确保 Docker 已安装 在开始之前&#xff0c;确保在 CentOS 服务器上已经安装了 Docker。如果没有安装&#xff0c;可以使用以下命令进行安装&#xff1a; sudo yum install docker步骤 2:…...

vector类模拟实现(c++)(学习笔记)

vector 构造函数析构函数[]push_backsize()capacity()reserve()push_back() 迭代器实现非const和const版本 pop_back()resize()insert()***重点erase()***重点再谈构造函数&#xff01;拷贝构造函数****&#xff08;重点&#xff09;运算符重载***&#xff08;重点&#xff09;…...

Redis Sentinel 哨兵模式

Sentinel 哨兵模式 Redis Sentinel 官网 Redis 的 Sentinel 文档 -- Redis中国用户组&#xff08;CRUG&#xff09; Sentinel Redis 命令参考&#xff08;红色&#xff09; Sentinel 通过监控的方式获取主机的工作状态是否正常&#xff0c;当主机发生故障时&#xff0c; Senti…...

实用篇-MQ消息队列

一、初识MQ 通讯分为同步通讯和异步通讯&#xff0c;同步通讯就比如我们日常生活中的打电话&#xff0c;看直播&#xff0c;能够得到及时的反馈。而异步通讯则类似于聊天软件聊天&#xff0c;不需要建立实时的连接&#xff0c;并且可以进行建立多个业务一起异步执行 1. 同步通…...

springboot打包时依赖jar和项目jar分开打包;jar包瘦身

概述 最近感觉项目在部署时时jar包传输太慢了&#xff1b; 看了下jar包内容&#xff0c;除了项目代码&#xff0c;其余大部分都是依赖jar&#xff1b; 平时改动较多的只是项目代码&#xff0c;依赖jar改动比较少&#xff1b; 所以就在想能不能分开打包&#xff1b;这样只部署项…...

嵌入式系统的元素

注意&#xff1a;关于嵌入式系统的元素这一块儿内容&#xff0c;定义太多了。例如&#xff1a;吉姆莱丁 著&#xff0c;陈会翔 译&#xff0c;由清华大学出版社出版的《构建高性能嵌入式系统》中提到&#xff1a;嵌入式系统通常由电源、时基、数字处理、内存、软件和固件、专用…...

提升ChatGPT答案质量和准确性的方法Prompt engineering实用的prompt灵感和技巧

文章目录 1. 实用的prompt灵感和技巧小技巧常用prompt保存到输入法中普通promptprompt通用公式保存到输入法快捷指令中尝试用英语去写prompt沉浸式翻译软件3. 补充1. 实用的prompt灵感和技巧 解释***,并且给出暗喻/隐喻/类比(解释术语、专业名称,用一个词或短语指出常见的一…...

[Machine Learning] Learning with Noisy Labels

文章目录 随机分类噪声 (Random Classification Noise, RCN)类别依赖的标签噪声 (Class-Dependent Noise, CCN)二分类多分类 实例和类别依赖的标签噪声 (Instance and Label-Dependent Noise, ILN) 标签噪声是指分类任务中的标签被错误地标记。这可能是由于各种原因&#xff0c…...

集简云slack(自建)无需API开发轻松连接OA、电商、营销、CRM、用户运营、推广、客服等近千款系统

slack是一个工作效率管理平台&#xff0c;让每个人都能够使用无代码自动化和 AI 功能&#xff0c;还可以无缝连接搜索和知识共享&#xff0c;并确保团队保持联系和参与。在世界各地&#xff0c;Slack 不仅受到公司的信任&#xff0c;同时也是人们偏好使用的平台。 官网&#x…...

Idea 对容器中的 Java 程序断点远程调试

第一种&#xff1a;简单粗暴型 直接在java程序中添加log.info()&#xff0c;根据需要打印信息然后打包覆盖&#xff0c;根据日志查看相关信息 第二种&#xff1a;远程调试 在IDEA右上角点击编辑配置设置相关参数在Dockerfile中加入 "-jar", "-agentlib:jdwp…...

vscode设置保存后,自动格式化代码

第一步&#xff1a;打开setting.json文件 第二步&#xff1a;在setting.json中加入以下代码 "editor.formatOnType": true, "editor.formatOnSave": true, "editor.formatOnPaste": true...

datagrip出现 java.net.ConnectException: Connection refused: connect.

出现这样的情况要看一下hadoop有没有启动 start-all.sh nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 & scp -r /export/server/apache-hive-3.1.2-bin/ node3:/export/server/ /export/server/apache-hive-3.1.2-bin/bin/hive show databa…...

Docker 安装ELK7.7.1

(在安装之前&#xff0c;本方法必须安装jdk1.8以上版本) 一、安装elasticsearch 1、下载elasticsearch7镜像&#xff1a;docker pull elasticsearch:7.7.1 2、创建挂载目录&#xff1a;mkdir -p /data/elk/es/{config,data,logs} 3、赋予权限&#xff1a;chown -R 1000:100…...

决策树算法

决策树算法是一种用于分类和回归问题的机器学习算法。它通过构建树形结构来进行决策&#xff0c;每个内部节点代表一个特征或属性&#xff0c;每个叶子节点代表一个类别或值。 下面是决策树算法的一般步骤&#xff1a; 数据准备&#xff1a;收集相关的训练数据&#xff0c;并对…...

maven之pom文件详解

一、maven官网 maven官网 maven官网pom文件详解链接 二、maven之pom 1、maven项目的目录结构 pom文件定于了一个maven项目的maven配置&#xff0c;一般pom文件的放在项目或者模块的根目录下。 maven的遵循约定大于配置&#xff0c;约定了如下的目录结构&#xff1a; 目录目…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...