WPF教程(二)--Application WPF程序启动方式

news/2024/5/24 11:40:38/

1.Application介绍

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

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

2.WPF应用程序的启动方式

1.使用程序自身App.xaml文件定义启动WPF应用程序启动点

XAML从严格意义上说并不是一个纯粹的 XML 格式文件,它更像是一种 DSL(Domain Specific Language,领域特定语言),它的所有定义都会由编译器最后编译成代码。

App.xaml文件默认内容如下图:
这里写图片描述

 2、通过创建一个自定义类(类内定义Main方法--特性STAThread)来实现WPF程序启动:
第一步:去除原有App.xaml文件--如下图,在“解决方案资源管理器”中使用鼠标左键选中App.xaml文件,然后鼠标右键,弹出“弹出菜单—》从项目中排除”,这样就在项目中去掉了我们刚才建立的App.xaml文件。

这里写图片描述

第二步:现在中添加一个新类(WPF程序启动点),类名为App.cs。如下图。在“解决方案资源管理器”中使用鼠标左键选中“WpfApp1”项目,然后点击鼠标右键,弹出“弹出菜单”,按下图中所示操作。

这里写图片描述

 第三步:在弹出的“添加新项”界面中,选中“类”,把名称修改为“App.cs”。如下图。

这里写图片描述

 第四步:在“解决方案资源管理器”中双击App.cs(如下图),打开文件,然后可以分别写入以下三种方式的代码,进行启动效果的调试

这里写图片描述

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows; 
namespace WpfApp1; 
{class App{[STAThread]static void Main(){// 定义Application对象作为整个应用程序入口  Application app = new Application();// 方法一:调用Run方法 ,这种方式跟winform的调用一样WindowGrid win = new WindowGrid();app.Run(win);}}
}

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;namespace WpfApp1
{class App{[STAThread]static void Main(){// 定义Application对象作为整个应用程序入口  Application app = new Application();      //指定Application对象的MainWindow属性为启动窗体,然后调用无参数的Run方法  WindowGrid win = new WindowGrid();  app.MainWindow = win;//是必须的,否则无法显示窗体       win.Show();                    app.Run();  }}
}

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace WpfApp1
{class App{[STAThread]static void Main(){// 定义Application对象作为整个应用程序入口  Application app = new Application();// 通过Url的方式启动app.StartupUri = new Uri("WindowGrid.xaml", UriKind.Relative);app.Run();}}
}

以上三种方法都可以使WPF程序启动窗口运行成功


http://www.ppmy.cn/news/48148.html

相关文章

软考-项目管理科学基础(二十一)

第21章项目管理科学基础 (P607考5分择) 21.1.2项目经济评价 根据是否考虑资金的时间价值,投资项目经济评价方法可分为两类:静态评价和动态评价。 1.静态评价方法 静态评价是指在进行项目方案效益和费用的计算时,不考虑资金的时间价值,不计利…

CMD命令学习整理

01、定时关机 倒计时:shutdown -s -t 3600 解释:-s表示本机;-t 3600表示3600秒后。意思就是本台电脑在一个小时后关机 at 12:00 shutdown -s 表示本台电脑将在12点关机。大家可以按照自己的需求设置。 取消:shutdown -a 取消关…

设计模式-行为型模式之中介者模式

2. 中介者模式 2.1. 模式动机 在用户与用户直接聊天的设计方案中,用户对象之间存在很强的 关联性,将导致系统出现如下问题: 系统结构复杂 对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关…

苹果撤离中国市场?中国市场太重要,印度制造是备胎

苹果在中国之行后,却计划进一步扩大印度制造iPhone的比例,甚至将iPhone15全数交给印度制造,业界因此认为苹果正在离开中国市场,然而这完全是臆想,中国市场对苹果来说仍然非常重要,它不会轻易舍弃这个市场。…

进程和线程的区别

进程和线程的区别 进程线程线程和进程的区别堆栈空间安全性通信机制 什么时候使用进程和线程线程和进程之间的关系多线程一般用在哪些方面多线程的优点多线程的缺点 进程 资源分配的最小单元 线程 程序执行的最小单元 系统分配处理器时间的基本单元 线程和进程的区别 堆栈…

( “树” 之 BFS) 637. 二叉树的层平均值 ——【Leetcode每日一题】

637. 二叉树的层平均值 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 1 0 − 5 10^{-5} 10−5 以内的答案可以被接受。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[3.00000,14.50000,1…

性能优化3-分帧寻路+寻路任务统一管理

前言 当项目里的地图越来越大,一些性能上的问题开始逐渐出现,比如寻路。玩家在操控角色移动的时候,指引需要实时更新,同时一些npc也需要做移动,容易出现cpu占用率短时间过高,甚至掉帧的情况。 去年底的时候…

java基于mvc的停车收费系统mysql

系统需要解决的主要问题有: (1)车位管理模块 添加车位、查看车位状态、车位信息查询等。 (2)客户信息管理模块 客户基本信息录入、客户信息查询等。 (3)卡业务办理 添加卡信息、查余额查询、卡充值。 (4)车辆信息管理模块 车牌信息录入等。 (5)收费管理 可以调整相应…

<a> 元素相关属性及方法

<a> 元素 <a>元素用来设置链接。除了网页元素的通用接口&#xff08;Node接口、Element接口、HTMLElement接口&#xff09;&#xff0c;它还继承了HTMLAnchorElement接口和HTMLHyperlinkElementUtils接口。 目录 属性 URL 相关属性accessKey 属性download 属性href…

linux及openEuler破解root密码

第一步&#xff1a;开机的时候按键盘的字母 E 键&#xff0c; 进入引导模式 第二步&#xff1a;进入引导模式 &#xff1a;找到linux这一行&#xff0c;按键盘上的end 键&#xff0c;跳转到行尾&#xff0c;输入&#xff1a; init/bin/sh 修改完后&#xff0c;按键盘上的 ctr…

上海车展:比亚迪宋L概念车全球首发,这是要硬扛特斯拉?

纵观2023年的新能源汽车市场&#xff0c;特斯拉可以说当仁不让地成为了全球最为“吸睛”的车企之一。凭借一系列令无数人瞠目结舌的降价举措&#xff0c;特斯拉给全球汽车市场带来了强烈冲击。虽然特斯拉上海工厂已经接近满负荷运转&#xff0c;但是面对雪片般飞来的订单依然供…

python学习——缺失值、重复值处理、排序及替换

文章目录 1 缺失值处理1.1 查看缺失值 df.isnull()1.2 统计缺失值 df.isnull().sum()1.3 删除缺失值 df.drop()1.4 填充缺失值 df.fillna()1.4.1 固定值填充 df.fillna(value)1.4.2 线性插值填充 df.fillna(df.interpolate()) 2 重复值处理2.1 查看重复值 df.duplicated()2.2 筛…

docker简单教程(三)常用操作

docker简单教程&#xff08;三&#xff09;常用操作 文章目录 docker简单教程&#xff08;三&#xff09;常用操作1&#xff1a;查看所有容器列表&#xff1a;docker ps -a2&#xff1a;查看正在运行的容器列表&#xff1a;docker ps3&#xff1a;运行容器&#xff1a;docker r…

测牛学堂:2023软件测试linux和shell脚本入门系列(shell的运算符)

shell中的注释 以# 开头的就是shell中的注释&#xff0c;不会被执行&#xff0c;是给编程的人看的。 shell中的运算符 shell中有很多运算符。 按照分类&#xff0c;可以分为算术运算符&#xff0c;关系运算符&#xff0c;布尔运算符&#xff0c;字符串运算符&#xff0c;文件…

把树莓派改造成无线软路由器(2)-----无线路由器模式(独立无线路由器)

本文目录 1、准备工作2、安装无线AP和管理软件3、设置网络路由3.1、树莓派的无线网络接口IP配置3.2、启用路由和IP伪装3.3、为无线网络配置DHCP和DNS服务 4、确认无线配置5、配置 AP 软件6、运行wifi无线AP 树莓派可用作网络中的一个wifi无线路由器。让使用无线接入的计算机和设…

sqlserver用SQL脚本进行备份和还原操作

--1.1备份数据库脚本 USE [master] GO BACKUP DATABASE [Test] TO DISK D:\Test\Test_20230419.bak GO --1.2还原数据库,注意一定要用NORECOVERY还原备份 USE [master] GO RESTORE DATABASE [Test] FROM DISKND:\Test\Test_20230419.bak WITH FILE 1, MOVE NTest TO ND:\Test…

后缀数组的应用:最长公共子串

题目描述 假设 str1 长度为 N N N&#xff0c;str2 长度为 M M M&#xff0c;求 str1 和 str2 的最长公共子串。 思路分析 示例&#xff1a;str1 “12abcd456”, str2 “7abcd89”&#xff0c;则str1和str2的最长公共子串为 abcd。 注意&#xff0c;子串是连续的。 动…

C. Anna, Svyatoslav and Maps(floyd + 思维)

Problem - C - Codeforces 给你一个有n个顶点的无权图&#xff0c;以及由m个顶点的序列p1,p2,...,pm给出的路径&#xff08;该路径不一定简单&#xff09;&#xff1b;对于每个1≤i<m&#xff0c;有一个弧从pi到pi1。 如果v是p的子序列&#xff0c;v1p1&#xff0c;vkpm&a…

JavaScript有几种数据类型,分别是什么?

在JavaScript中&#xff0c;我们可以分成两种类型&#xff1a;基本类型 复杂类型&#xff08;引用类型&#xff09; 两种类型的区别是&#xff1a;存储位置不同 基本类型主要为以下六种&#xff1a; Number、String、Boolean、Undefined、Null、Symbol 复杂类型/引用类型统称为…

C++ const关键字

参考资料&#xff1a; 【C const的各种用法详解】【const用法深入浅出】 - COS - 博客园 (cnblogs.com) const的基本概念&#xff1a; const名叫常量限定符&#xff0c;用来限定特定变量&#xff0c;以通知编译器该变量是不可修改的。习惯性的使用const&#xff0c;可以避免在函…