【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 类具体有以下功能:
- 跟踪应用程序的生存期并与之交互。
- 检索和处理命令行参数。
- 检测和响应未经处理的异常。
- 共享应用程序范围的属性和资源。
- 管理独立应用程序中的窗口。
- 跟踪和管理导航。
二、初始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属性
| 序号 | 属性名 | 说明 |
|---|---|---|
| 1 | Current | 获取当前Application的AppDomain对象 |
| 2 | Dispatcher | 获取与此Dispatcher关联的DispatcherObject。 |
| 3 | MainWindow | 获取或设置应用程序的主窗口 |
| 4 | Properties | 获取应用程序范围属性的集合 |
| 5 | ResourceAssembly | 获取或设置 , Assembly 它为 WPF 应用程序中的资源提供包统一资源标识符 (URI) 。 |
| 6 | Resource | 获取或设置应用程序范围资源(如样式和画笔)的集合。 |
| 7 | ShutdownMode | 获取或设置导致调用 Shutdown() 方法的条件 |
| 8 | StartupUri | 获取或设置在应用程序启动时自动显示的 UI。 |
| 9 | Windows | 获取应用程序中的实例化窗口。 |
四、Application方法
| 序号 | 方法名 | 说明 |
|---|---|---|
| 1 | CheckAccess() | 确定调用线程是否可以访问此DispatcherObject。(继承自DispatcherObject) |
| 2 | Equals(Object) | 确定指定对象是否等于当前对象。 |
| 3 | FindResource(Object) | 使用指定的键搜索用户界面(UI)资源(如Style或Brush),如果找不到请求的资源,则引发异常 |
| 4 | GetContentStream(Uri) | 返回位于指定Uri的内容数据文件的资源流。 |
| 4 | GetCookie(Uri) | 为由Uri指定的位置检索Cookie。 |
| 5 | GetHashCode() | 作为默认哈希函数 |
| 6 | GetRemoteStream(Uri) | 返回位于指定Uri的源站点数据文件的资源流 |
| 7 | GetResourceStream(Uri) | 返回位于指定Uri的资源数据文件的资源流 |
| 8 | GetType() | 获取当前实例的Type |
| 9 | LoadComponent(Object,Uri) | 加载位于指定统一资源标识符的XAML文件(URI), 并将其转换为由XAML文件的根元素指定的对象的实例。 |
| 10 | LoadComponent(Uri) | 加载位于指定统一资源标识符的XAML文件(URI),并将其转换为由XAML文件的根元素指定的对象的实例。 |
| 11 | MemberwiseClone() | 创建当前Object的浅表副本 |
| 12 | OnActivated(EventArgs) | 引发Activated事件 |
| 13 | OnDeactivated(EventArgs) | 引发Deactivated事件 |
| 14 | OnExit(ExitEventArgs) | 引发Exit事件 |
| 15 | OnFragmentNavigation (FragmentNavigationEventArgs) | 引发FragmentNavigation事件 |
| 16 | OnLoadCompleted (NavigationEventArgs) | 引发 LoadCompleted 事件。 |
| 17 | OnNavigated (NavigationEventArgs) | 引发 Navigated 事件。 |
| 18 | OnNavigationFailed (NavigationFailedEventArgs) | 引发 NavigationFailed事件 |
| 19 | OnNavigationProgress (NavigationProgressEventArgs) | 引发 NavigationProgress 事件。 |
| 20 | OnNavigationStopped (NavigationEventArgs) | 引发 NavigationStopped 事件。 |
| 21 | OnSessionEnding (SessionEndingCancelEventArgs) | 引发 SessionEnding事件 |
| 22 | OnStartup(StartupEventArgs) | 引发 Startup 事件。 |
| 23 | Run() | 启动 Windows Presentation Foundation 应用程序。 |
| 24 | Run(Window) | 启动 Windows Presentation Foundation 应用程序并打开指定窗口。 |
| 25 | SetCookie(Uri,String) | 为由 Uri指定的位置创建一个 Cookie。 |
| 26 | Shutdown() | 关闭一个应用程序 |
| 27 | Shutdown(Int32) | 关闭将指定退出代码返回给操作系统的应用程序。 |
| 28 | ToString() | 返回表示当前对象的字符串 |
| 29 | TryFindResource(Object) | 搜索指定资源。 |
| 30 | VerifyAccess() | 强制调用线程具有此DispatcherObject的访问权限。 |
五、Application事件
| 序号 | 事件名 | 说明 |
|---|---|---|
| 1 | Activated | 当应用程序成为前台应用程序时发生。 |
| 2 | Deactivated | 当应用程序停止作为前台应用程序时发生。 |
| 3 | DispatcherUnHandledException | 在异常由应用程序引发但未进行处理时发生。 |
| 4 | Exit | 在应用程序关闭且无法取消之前发生 |
| 5 | FragmentNavigation | 当应用程序中的导航器开始导航到内容片段时发生;如果所需片段位于当前内容中,则导航将立即发生;如果所需片段位于不同内容中,则加载源 XAML 内容后,将立即发生导航。 |
| 6 | LoadCompleted | 在已经加载、分析并开始呈现应用程序中的导航器导航到的内容时发生 |
| 7 | Navigated | 在已经找到应用程序中的导航器要导航到的内容时发生,尽管此时该内容可能尚未完成加载。 |
| 8 | Navigating | 在应用程序中的导航器请求新导航时发生。 |
| 9 | NavigationFailed | 在应用程序中的导航器在导航到所请求内容时出现错误的情况下发生。 |
| 10 | NavigationProgress | 在由应用程序中的导航器管理的下载过程中定期发生,以提供导航进度信息。 |
| 11 | NavigationStopped | 在调用应用程序中的导航器的 StopLoading方法时发生,或者当导航器在当前导航正在进行期间请求了一个新导航时发生。 |
| 12 | SessionEnding | 当用户通过注销或关闭操作系统来结束 Windows 会话时发生。 |
| 13 | StartUp | 在调用Run()对象的Application方法时发生 |
六、Application总结
Application是封装WPF应用程序特定功能的类,实现单一实例模式,以提高对其窗口,属性和资源范围服务的共享访问,因此,每个WPF的AppDomain只是创建类的Application一个实例。Application可以通过使用标记、标记和代码隐藏或代码实现Application。
相关文章:
【WPF系列】- Application详解
【WPF系列】- Application详解 文章目录 【WPF系列】- Application详解一、Application简介Application 类具体有以下功能: 二、初始App.xaml二、自定义Main方法启动WPF应用程序第一种:启动应用程序的代码第二种:启动应用程序的代码第三种:启…...
常见的内置方法:__call__,__getitem__,__iter__,__next__
1.__call__方法 在创建好一个实例后,直接调用一个实例会报错。但使用__call__后,可以让这个实例可以像方法一样被调用(就是一个函数后面加个括号的函数调用形式) class Person:passp1 Person() p1() # 实例这样无法直接被调…...
python用cv2画图(line, rectangle, text等)
Python做图像图形研究的时候,通常需要画很多辅助几何形状(比如bounding box等)。基于opencv的几何图形绘制具有易用性,而且天然能和numpy数组交互。 本文总结了几种常用的cv2画几何图形的方法,当一个简易的手册使用&a…...
解决方案中word中分页符的使用
在投标方案中要善于使用“分页符”,尽可能少使用分节符号,没有分页符前,你每次修改你的标书或者文件,增加或者修改内容后。你的格式字段前后都是会发生变化,如何稳定的保证结构呢,那就是分页符的使用&#…...
ubuntu20.04下apache启用php7.4-fpm
默认的apache不解析php文件: 直接安装提示依赖有问题: 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 容器
标题:在 CentOS 服务器上部署 JAR 文件到 Docker 容器的详细步骤 步骤 1: 确保 Docker 已安装 在开始之前,确保在 CentOS 服务器上已经安装了 Docker。如果没有安装,可以使用以下命令进行安装: sudo yum install docker步骤 2:…...
vector类模拟实现(c++)(学习笔记)
vector 构造函数析构函数[]push_backsize()capacity()reserve()push_back() 迭代器实现非const和const版本 pop_back()resize()insert()***重点erase()***重点再谈构造函数!拷贝构造函数****(重点)运算符重载***(重点)…...
Redis Sentinel 哨兵模式
Sentinel 哨兵模式 Redis Sentinel 官网 Redis 的 Sentinel 文档 -- Redis中国用户组(CRUG) Sentinel Redis 命令参考(红色) Sentinel 通过监控的方式获取主机的工作状态是否正常,当主机发生故障时, Senti…...
实用篇-MQ消息队列
一、初识MQ 通讯分为同步通讯和异步通讯,同步通讯就比如我们日常生活中的打电话,看直播,能够得到及时的反馈。而异步通讯则类似于聊天软件聊天,不需要建立实时的连接,并且可以进行建立多个业务一起异步执行 1. 同步通…...
springboot打包时依赖jar和项目jar分开打包;jar包瘦身
概述 最近感觉项目在部署时时jar包传输太慢了; 看了下jar包内容,除了项目代码,其余大部分都是依赖jar; 平时改动较多的只是项目代码,依赖jar改动比较少; 所以就在想能不能分开打包;这样只部署项…...
嵌入式系统的元素
注意:关于嵌入式系统的元素这一块儿内容,定义太多了。例如:吉姆莱丁 著,陈会翔 译,由清华大学出版社出版的《构建高性能嵌入式系统》中提到:嵌入式系统通常由电源、时基、数字处理、内存、软件和固件、专用…...
提升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) 标签噪声是指分类任务中的标签被错误地标记。这可能是由于各种原因,…...
集简云slack(自建)无需API开发轻松连接OA、电商、营销、CRM、用户运营、推广、客服等近千款系统
slack是一个工作效率管理平台,让每个人都能够使用无代码自动化和 AI 功能,还可以无缝连接搜索和知识共享,并确保团队保持联系和参与。在世界各地,Slack 不仅受到公司的信任,同时也是人们偏好使用的平台。 官网&#x…...
Idea 对容器中的 Java 程序断点远程调试
第一种:简单粗暴型 直接在java程序中添加log.info(),根据需要打印信息然后打包覆盖,根据日志查看相关信息 第二种:远程调试 在IDEA右上角点击编辑配置设置相关参数在Dockerfile中加入 "-jar", "-agentlib:jdwp…...
vscode设置保存后,自动格式化代码
第一步:打开setting.json文件 第二步:在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
(在安装之前,本方法必须安装jdk1.8以上版本) 一、安装elasticsearch 1、下载elasticsearch7镜像:docker pull elasticsearch:7.7.1 2、创建挂载目录:mkdir -p /data/elk/es/{config,data,logs} 3、赋予权限:chown -R 1000:100…...
决策树算法
决策树算法是一种用于分类和回归问题的机器学习算法。它通过构建树形结构来进行决策,每个内部节点代表一个特征或属性,每个叶子节点代表一个类别或值。 下面是决策树算法的一般步骤: 数据准备:收集相关的训练数据,并对…...
maven之pom文件详解
一、maven官网 maven官网 maven官网pom文件详解链接 二、maven之pom 1、maven项目的目录结构 pom文件定于了一个maven项目的maven配置,一般pom文件的放在项目或者模块的根目录下。 maven的遵循约定大于配置,约定了如下的目录结构: 目录目…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
