尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

WPF 基础到企业应用系列4——WPF千年轮回

WPF 基础到企业应用系列4——WPF千年轮回
📅 发布时间:2026/7/6 5:02:39

首先很高兴这个系列能得到大家的关注和支持,基于对大家负责和对自己负责的态度,我会不断努力写好这个系列,分享自己的微薄技术和经验,希望在帮助别人的同时也不断提升自己。由于这篇文章很多(现已拆分成2篇,今天这篇只是其中之一),一共花了几个个晚上的休息时间才完成,所以读者花的时间长了一些,也希望大家能够见谅,这个系列以后会每周发三到四篇左右(主要是写一篇差不多要花几晚上,感觉思维比较发散),除了讲WPF技术本身之外,也会讲一些项目具体开发,所以敬请关注。

本篇文章取名为WPF千年轮回只因为两个原因:

  1. WPF和当年Win32、WinForm等的到来颇为相似,只是在功能和体验上上进行了提高,所以这是微软产品上的一个轮回;
  2. WPF的学习过程和其他技术一样,譬如ASP.NET,我们在学习的时候会先要了解Asp.Net构架(Http请求处理流程)、Pipeline、HttpHandler 和 HttpModule 等内容,这和WPF的Application生命周期相对应,再如WPF的Window生命周期可以和ASP.NET的页面生命周期相对应等。当然你也可以拿WinForm或者其他技术来举例,这里这是阐述观点。

在前三篇文章中我们对WPF有了一个比较全面的认识,并且也通过一个基本的例子对比了WPF和之前的WinForm程序的区别和联系。那么在本篇文章当中,除了讲一些理论知识外,更多的是用实际的代码来验证这些理论。

2.本文提纲

· 1.开篇前言

· 2.本文提纲

· 3.Application

· 4.Window

· 5.Dispatcher及多线程

· 6.类继承结构

· 7.WPF的逻辑树和视觉树

· 8.本文总结

. 9.系列进度

3.Application

一.介绍

WPF和 传统的WinForm 类似, WPF 同样需要一个 Application 来统领一些全局的行为和操作,并且每个 Domain (应用程序域)中只能有一个 Application 实例存在。和 WinForm 不同的是 WPF Application 默认由两部分组成 : App.xaml 和 App.xaml.cs,这有点类似于 Delphi Form(我对此只是了解,并没有接触过Delphi ),将定义和行为代码相分离。当然,这个和WebForm 也比较类似。XAML 从严格意义上说并不是一个纯粹的 XML 格式文件,它更像是一种 DSL(Domain Specific Language,领域特定语言),它的所有定义都直接映射成某些代码,只是具体的翻译工作交给了编译器完成而已。WPF应用程序由 System.Windows.Application类来进行管理。

二.创建WPF应用程序

创建WPF应用程序有两种方式:

1、Visual Studio和Expression Blend默认的方式,使用App.xaml文件定义启动应用程序

App.xaml文件的内容大致如下所示:

2、可以自已定义类,定义Main方法实现对WPF应用程序的启动

在项目中添加一个类,类的代码如下,在项目选项中,设定此类为启动项。

using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Windows; namespace WPFApplications { /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : Application { [STAThread] static void Main() { // 定义Application对象作为整个应用程序入口 Application app = new Application(); // 方法一:调用Run方法,参数为启动的窗体对象 ,也是最常用的方法 Window2 win = new Window2(); app.Run(win); // 方法二:指定Application对象的MainWindow属性为启动窗体,然后调用无参数的Run方法 //Window2 win = new Window2(); //app.MainWindow = win; //win.Show(); // win.Show()是必须的,否则无法显示窗体 //app.Run(); // 方法三:通过Url的方式启动 //app.StartupUri = new Uri("Window2.xaml", UriKind.Relative); //app.Run(); } } }

三、Application应用程序关闭

OnLastWindowClose(默认值):最后一个窗体关闭或调用Application对象的Shutdown() 方法时,应用程序关闭。
OnMainWindowClose启动窗体关闭或调用Application对象的Shutdown()方法时,应用程序关闭。(和C#的Windows应用程序的关闭模式比较类似)
OnExplicitShutdown只有在调用Application对象的Shutdown()方法时,应用程序才会关闭。

对关闭选项更改的时候,可以直接在App.xaml中更改:

<Application x:Class="WPFApplications.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="Window2.xaml" ShutdownMode="OnExplicitShutdown"> <Application.Resources> </Application.Resources> </Application>

同样你也可以在代码文件(App.xaml.cs)中进行更改,但必须注意这个设置写在app.Run()方法之前 ,如下代码:
app.ShutdownMode = ShutdownMode.OnExplicitShutdown;
app.Run(win);

四、Application对象的事件

名称

描述

Activated

当应用程序成为前台应用程序时发生,即获取焦点。

Deactivated

当应用程序停止作为前台应用程序时发生,即失去焦点。

DispatcherUnhandledException

在异常由应用程序引发但未进行处理时发生。

Exit

正好在应用程序关闭之前发生,且无法取消。

FragmentNavigation

当应用程序中的导航器开始导航至某个内容片断时发生,如果所需片段位于当前内容中,则导航会立即发生;或者,如果所需片段位于不同 内容中,则导航会在加载了源 XAML 内容之后发生。

LoadCompleted

在已经加载、分析并开始呈现应用程序中的导航器导航到的内容时发生。

Navigated

在已经找到应用程序中的导航器要导航到的内容时发生,尽管此时该内容可能尚未完成加载。

Navigating

在应用程序中的导航器请求新导航时发生。

NavigationFailed

在应用程序中的导航器在导航到所请求内容时出现错误的情况下发生。

NavigationProgress

在由应用程序中的导航器管理的下载过程中定期发生,以提供导航进度信息。

NavigationStopped

在调用应用程序中的导航器的 StopLoa

相关新闻

  • Jetson Xavier NX + ZYNQ FPGA 异构平台:PCIe 20μs级数据同步与智能电网实时仿真
  • AIOps 变更风险评分:发布小,不代表风险小
  • 2026不限速避坑指南:百度网盘满速插件真实速度与防封机制横评

最新新闻

  • 常用git命令
  • 终极指南:用ImageSearch构建千万级本地图片搜索引擎,保护隐私的完美解决方案
  • Figo整体‑集体思维下的人工智能时代社会治理体系研究——基于道家与儒家传统的系统性框架构建
  • 如何3分钟完成Android Studio中文汉化:终极完整界面本地化指南
  • MQTT封装FreeRTOS下WIFI模块下的socket
  • 2026年免疫细胞存储机构盘点:无锡四家企业技术布局与服务边界观察

日新闻

  • AI智能体安全防护框架AgentGuard:从原理到实战部署指南
  • KMX63与PIC18F26K40硬件组合及低功耗设计实践
  • 基于YOLO13改进的门体检测模型:C3k2模块与PoolingFormer技术解析

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号