(二)WPF - 应用程序

news2024/11/8 21:51:27

一、运行程序的过程:

  • (1) Application 对象被构造出来。
  • (2)Run方法被调用。
  • (3)Application.Startup 事件被触发
  • (4)用户代码构造一个或多个 Window 对象。
  • (5)Application.Shutdow 方法被调用。
  • (6)Application.Exit 事件被触发。
  • (7)Run 方法完成执行。

初始化应用程序有两种方法

从 Application 对象的构造器中初始化应用程序,或者处理 Startup 事件通常更好,因为 Application 在这里才完成它的内部初始化(例如,Application.Current 不会在构造器中进行设置)。

二、错误处理

针对无法恢复的异常问题

StackOverflowException:堆栈溢出大部分是由于代码进入的是死循环。

OutofMemoryException:当系统运行于低内存的时候,如此少的可用资源以至于 CLR 都不能多分配一个字节了。在这样的情况下,没有任何代码能被即时编译,没有任何变量能被装箱,也没有任何对象能被分配。

ThreadAbortException:线程只有当应用程序代码调用 Thread.Abort 时才会终止,所以如果不调用 Thread.Abort,甚至都不会看到 ThreadAbortException 出现。

DispartcherUnhandledException
当无法使用任何代码来处理异常时,处理冒泡到应用程序上的异常;

<!--MyApp.xaml-->  
<Application ... DispatcherUnhandledException='Failure' />  
        //MyApp.xaml.cs  
        void Failure(object sender,DispatcheUnhandledExceptionEventArgs e){  
    // your custom logic  
}  
public class DispatcheUnhandledExceptionEventArgs  
        :DispatcherEventArgs{  
 public Wxception Excetion {get;}  
 public bool Handled {get;set;};  
}

三、窗口

窗口的生命周期的主要阶段:

  • (1)Window.Initalized 事件被触发;
  • (2)Window.Actived 事件被触发;
  • (3)Window.Loaded 事件被触发;
  • (4)Window.ContentRendered 事件被触发;
  • (5)Window.CotentRendered 事件被触发;
  • (6)用户和窗口进行交互;
  • (7)Window.Closing 事件被触发;
  • (8)Window.Unloaded 事件被触发;
  • (9)Window.Closed 事件被触发;

四、导航和页面

三个概念:导航宿主、导航内容、日志(负责跟踪应用程序的导航动作)

请添加图片描述

导航宿主:NavigationWindow 是WPF 中默认的导航宿主。NavigationWindow 继承自 Window 并添加了一个默认的导航 UI(回退按钮等)。以及一些实现导航的必需基础功能。NavigationWindow 可以如 Window 那样访问所有应用程序级的特性。利用 NavigationWindow,可以实现 SDI 导航窗口模型。它能托管导航内容;
导航内容:如数据对象,如字符串这样的基本类型或页面。

public class NavExample: NavigationWindow{  
 public NavExample(){  
     Mavigate(new Page1());//导航内容  
 }     
}

public class Page1:Page{  
public Page1(){  
        TextBlock block = new TextBlock();  
        Hyperlink link = new Hyperlink();  
        link.Click += LinkClicked;  
        link.Inlines.Add("Click for page 2");  
        block.Inlines.Add(link);  
        Content = block;  
        WindowTitle = "Page 1";  
    }  
    void LinkClicked(object sender,RoutedEventArgs e){  
        NavigationService.Navigate(new Page2());  
    }  
}

NavigationService 对象提供了宿主独立的导航操作的访问能力。NavigationService 将能正常处理导航操作,而不管页面是被托管在浏览器中还是在 NavigationWindow 中;

日志: 跟踪所有东西。

备注:
历史(History): 所访问站点的一个固定列表,是一种以时间为基础的自动书签列表;
日志(Journal): 在当前会话中所访问站点的列表。

使用xaml实现导航

<!--page1.xaml-->
<page WindowTitle ='Page 1'>
<TextBlock>
<Hyperlink NavigateUri='page2.xaml'>
Click for page 2
</Hyperlink>
</TextBlock>
</page>

<!--page2.xaml-->
<Page WindowTitle='Page 2'>
</page>

<!--navexample.xaml-->

<NavigationWindow x:Class='EssentialWPF.NavExample' Source='page1.xaml'>

</NavigationWindow>

NavigationWindow 的 Source 属性能被设置为第一个页面的 URI 名称(Page1.xaml),这样

启动页面

<!--app.xaml-->
<Application x:Class='EssentialWPF.App' StartupUri='page1.xaml'>
</Application>

在页面之间传递状态

在HTML中,通过在服务器上保存状态来传递数据,或者利用客户端的 Cookie 来完成数据传递。在 WPF 中传递数据的一个简单的方式就是利用 Application 的 Properties 字典。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/677986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hibernate知识总结

关于Hibernate映射 关于Hibernate的映射要说明的一点就是关于ID的访问权限&#xff0c;property以及field的区别。以前使用的时候根本没有注意过这个问题&#xff0c;这里简单的强调一下。 表的主键在内存中对应一个OID对象描述标识符&#xff0c;需要在xml的配置文件中要指定对…

数据结构——队列的实现

队列&#xff0c;又称为伫列&#xff08;queue&#xff09;&#xff0c;计算机科学中的一种抽象资料类型&#xff0c;是先进先出&#xff08;FIFO, First-In-First-Out&#xff09;的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端&#xff08;称为rear&…

Hadoop 集群如何升级?

前言 本文隶属于专栏《大数据技术体系》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见大数据技术体系 正文 升级 Hadoop 集群需要细致的规划&#xff0c;特…

Web安全——JavaScript基础

JavaScript基础 一、概述二、嵌入方法1、内嵌式2、外链式3、行内式 三、语句四、注释五、变量六、JavaScript 保留关键字七、JavaScript 作用域1、JavaScript 局部变量2、JavaScript 全局变量 八、数据类型1、判断类型2、数字类型&#xff08;Number&#xff09;3、字符串型&am…

windows第三大结构体--KPCR

前面我们介绍了windows的两大结构体&#xff0c;一个是进程结构体&#xff0c;一个是线程结构体。那么第三个就是KPCR。KPCR是什么呢&#xff0c;是用于描述CPU的结构体。每一个CPU都有一个这样的结构体来描述CPU干了什么事。 1.在当线程切换的时候&#xff0c;也就是线程从3环…

Windows和Linux动态注入

摘要&#xff1a;最近对动态注入有一些兴趣因此搜索了些资料&#xff0c;简单整理了下相关的技术实现。本文只能够带你理解何如注入以及大概如何实现&#xff0c;对注入的方法描述的并不详细。   关键字&#xff1a;dll注入&#xff0c;hook&#xff0c;提权   读者须知&am…

hadoop -- Yarn资源管理

Yarn YARN被设计用以解决以往架构的需求和缺陷的资源管理和调度软件。 Apache Hadoop YARN &#xff08;Yet Another Resource Negotiator&#xff0c;另一种资源协调者&#xff09;是一种新的 Hadoop 资源管理器&#xff0c;它是一个通用资源管理系统和调度平台&#xff0c;可…

基于uprobe的调试调优浅析

uprobe与krobe对应&#xff0c;动态附加到用户态调用函数的切入点称为uprobe&#xff0c;相比如kprobe 内核函数的稳定性&#xff0c;uprobe 的函数由开发者定义。uprobe是用户态的探针&#xff0c;它和kprobe是相对应的&#xff0c;kprobe是内核态的探针。uprobe需要制定用户态…

深度学习模型压缩方法综述

深度学习因其计算复杂度或参数冗余,在一些场景和设备上限制了相应的模型部署,需要借助模型压缩、系统优化加速等方法突破瓶颈,本文主要介绍模型压缩的各种方法,希望对大家有帮助。 1,模型压缩技术概述 我们知道,一定程度上,网络越深,参数越多,模型也会越复杂,但其最终…

基于Smb协议实现网络文件传输

文章目录 什么是SMB协议SMB与CIFS区别为什么要使用SMB如何对接SMB服务如何用Java实现Smb文件传输SmbV1的实现基于SmbV1的文件上传基于SmbV1的文件下载基于SmbV1的文件重命名基于SmbV1的文件删除基于SmbV1的文件查询 SmbV2的实现基于SmbV2的文件上传基于SmbV2的文件下载基于SmbV…

面向开发人员的 ChatGPT 提示词教程中文版 - ChatGPT 版

面向开发人员的 ChatGPT 提示词教程中文版 - ChatGPT 版 1. 指南1-1. 提示的指南1-2. 配置1-3. 提示语原则原则 1: 写出清晰而具体的指示技巧 1: 使用分隔符来清楚地表明输入的不同部分技巧 2: 要求提供结构化的输出技巧 3: 要求模型检查条件是否得到满足技巧 4: "少许样本…

QML Canvas 元素(绘制文本)

关于 QML Canvas,我们已经学习了如何绘制基本图形、应用样式和颜色、绘制图像等,现在来看一下如何在 Canvas 中绘制文本。 Canvas 提供了两种方式来渲染文本: fillText(text, x, y) 在指定的 (x,y) 位置填充指定的文本 strokeText(text, x, y) 在指定的 (x,y) 位置绘制文本…

基于t分布变异自适应的改进的黏菌算法(TSMA)

目录 一、基于t分布的自适应黏菌优化算法TSAM 1.1 自适应t分布变异 1.2 建立基于t分布的自适应黏菌优化算法TSAM 二、TSMA伪码表示如下&#xff1a; 三、改进对比 黏菌优化算法灵感来自于黏菌的扩张和觅食行为。主要模拟了黏菌在觅食过程中的行为和形态变化&#xff0c;没…

【网络2】MII MDIO

文章目录 1.MII&#xff1a;ISO网络模型中物理层&#xff08;phy&#xff09;和数据链路层&#xff08;mac&#xff09;属于硬件&#xff0c;其余都属于软件kernel2.MDC/MDIO&#xff1a;不仅管phy&#xff0c;只要支持mdio协议都可以管2.1 3.RGMII时序调整&#xff1a;下面波形…

BUUCTF——九连环1

听这个名字就不正常&#xff0c;不会加密九次吧 打开也是一张图片 依旧是存在隐藏文件信息 分离出来后有两个文件&#xff0c;和两个压缩包&#xff0c;但是都需要密码 哦看错了&#xff0c;原来binwalk直接把里面的给分离出来了 所以现在就asd一个文件夹 爆破不出来&#xff0…

为什么调试很重要?gdb调试分析问题

为什么调试很重要&#xff1f; 一、引言二、调试的定义和分类2.1、调试的定义2.2.、调试的分类 三、调试的重要性四、调试的步骤和技巧4.1、定位问题4.2、重现问题4.3、分析问题4.4、解决问题4.5、调试技巧 五、简单的GDB调试示例&#xff1a;六、总结 一、引言 &#x1f4a1; …

【基于Django框架的在线教育平台开发-02】用户注册功能开发

用户注册功能开发 文章目录 用户注册功能开发1 模型层开发2 视图层开发3 配置urls.py4 表单验证5 模板层开发6 效果展示 1 模型层开发 用户数据表如下所示&#xff1a; FieldTypeExtraidintPrime Key & Auto Incrementpasswordvarchar(128)last_logindatetime(6)Allow Nu…

缓存雪崩和缓存穿透的解决方案

缓存雪崩 缓存雪崩是指存储在缓存里面的大量数据&#xff0c;在同一时刻全部过期&#xff0c;大部分流量直接到达了数据库&#xff0c;导致数据库压力增加&#xff0c;造成数据库崩溃的情况。 缓存雪崩的解决方案如下&#xff1a; 每个缓存的key设置不同的过期时间采用多级缓…

STM32单片机(九)USART串口----第四节:USART串口实战练习(串口发送+接收)

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

在 K8S 中部署一个应用 下

接着上一篇继续部署应用到 K8S中 之前简单部署的简单集群&#xff0c;三个工作节点是运行在 docker 和 kubelet 的&#xff0c;还有一个是控制节点 ReplicationController &#xff0c; pod 和 service 本次关系 之前有提到 ReplicationController &#xff0c; pod 和 服务…