(二)WPF - 应用程序

news/2024/4/16 21:15:57

一、运行程序的过程:

  • (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.ppmy.cn/news/535955.html

相关文章

zeromq的学习笔记

ctx_t 在创建ctx_t时&#xff0c;会设置以下参数 _io_thread_count io线程数默认是1 _max_sockets最大socket数是1023 _starting标识设置为true,此时socket还没有创建 _terminating设置为false,在调用zmq_ctx_term时该标识会设置为true _tag设置为ZMQ_CTX_TAG_VALUE_GOOD&…

TCP 学习笔记

Win R 打开控制台输入CMD 打开小黑窗&#xff0c; 输入ipconfig 查询本机地址 “外网IP是全世界唯一的IP地址,仅分配给一个网络设备。而内网IP是由路由器分配给每一部内部使用的IP地址,而内网的所有用户都是通过同一个外网IP地址进行上网的,而内网的IP地址每个人的都不一样…

GO 类型

GO 类型-变量 变量 GO是静态类型语言&#xff0c;不能在运行期改变变量类型。 变量定义 使⽤关键字 var 定义变量&#xff0c;⾃动初始化为零值。如果提供初始化值&#xff0c;可省略变量类型&#xff0c;由 编译器⾃动推断。 var x int var f float32 1.6 var s "…

细粒度分类:Cross-X论文笔记——Cross-X Learning for Fine-Grained Visual Categorization

细粒度分类:Cross-X论文笔记——Cross-X Learning for Fine-Grained Visual Categorization 综述主要思想网络结构OSME模块C3S正则化器CL正则化器损失优化实验可视化分析精度对比总结综述 论文题目:《Cross-X Learning for Fine-Grained Visual Categorization》 会议时间:I…

小程序性能优化

目录 代码包体积优化 1.合理使用分包加载 1.1独立分包 1.2分包预下载 1.3分包异步化 2.避免非必要的全局自定义组件和插件 3.控制代码包内的资源文件 4.及时清理无用代码和资源 代码注入优化 1.启动过程中减少同步API调用 2.启动过程中避免CPU密集型任务 首屏渲染优…

使用Event bus实现兄弟组件通讯

69. 使用Event bus实现兄弟组件通讯 1. 创建一个event bus实例 在Vue项目中&#xff0c;可以在src目录下新建一个event-bus.js文件&#xff0c;用来创建一个空的Vue实例&#xff0c;并导出该实例&#xff1a; import Vue from vue;export const EventBus new Vue();2. 在发…

(四)WPF - 布局

一、布局过程 WPF 布局包括两个阶段&#xff1a;一个测量阶段和排列阶段 在测量阶段&#xff0c;容器遍历所有子元素&#xff0c;并询问子元素它们所期望的尺寸。在排列阶段&#xff0c;容器在合适的位置放置子元素。&#xff08;每个元素都被其父元素告知它自己的尺寸是多少…

surface pro7 问题集锦

Surface pro 7遇到的问题集锦 问题一&#xff1a;想入手surface pro7但是256G的比128G的要贵一千大洋&#xff0c;怎么办呢&#xff1f;预算有限&#xff0c;查到可以插TF卡拓容&#xff0c;于是就全网开始搜选卡攻略。终于找到你&#xff5e; 上链接&#xff1a;https://post…

hwc2 surfaceflinger启动流程分析

先还是大体的来看下流程图&#xff0c;这个比hwc1复杂了好多&#xff0c;不是太好理解&#xff1a; 1.SurfaceFlinger.init "Starting with vr flinger active is not currently supported.");mRealHwc new HWComposer(false);mHwc mRealHwc;mHwc->setEventHa…

Platinum Maestro运动控制器 —— PVT模式笔记

文章目录 0. 文章说明1. PVT说明2.PVT 插值模式2.1 三次多项式插值(eCUBIC_POLYNOM)2.2 五次多项式插值(eQUINTIC_ON_CUBIC)2.3 七次样条多项式(eSEPTIC_ON_CUBIC)2.4 正弦插值2.4.1 三角正弦插值(eCYCLOID_VELOCITY_MODIFIED1)2.4.2 梯形正弦插值(eCYCLOID_VELOCITY_MODIFIED2…

SurfaceFlinger模块

SurfaceFlinger是一个系统服务&#xff0c;作用就是接受不同layer的buffer数据进行合成&#xff0c;然后发送到显示设备进行显示。 SurfaceFlinger进程是什么时候起来的&#xff1f; 在之前的Android低版本手机上&#xff0c;SurfaceFlinger进程是在init.rc中启动的&#xff0…

androidP Surface到SurfaceFlinger -->创建Surface (一)

创建Surface 前言ViewRootImpl创建Surface 前言 我们前面已经分析过Activity启动如何去连接到SurfaceFlinger了&#xff0c;接下来就看Activity的Surface的创建到SurfaceFlinger的过程。ViewRootImpl创建Surface 在调用了WindowManagerGlobal的addView方法之后会首先去创建一个…

Ansys Speos | 基于 Workbench 和 Speos 的准直全反射透镜优化设计案例

概述 基于Ansys Speos软件&#xff0c;可以准确建立光学系统模型并进行成像效果仿真。在使用Speos进行光学系统设计过程中&#xff0c;当完成初始光学系统建模后&#xff0c;还需要进一步结合仿真结果&#xff0c;调整出满足设计要求的系统参数&#xff0c;如果采用手动调整参…

Android系统Surface机制的SurfaceFlinger服务的启动过程分析

在前面一篇文章中&#xff0c;我们简要介绍了Android系统Surface机制中的SurfaceFlinger服务。SurfaceFlinger服务是在System进程中启动的&#xff0c;并且负责统一管理设备的帧缓冲区。SurfaceFlinger服务在启动的过程中&#xff0c;会创建两个线程&#xff0c;其中一个线程用…

Python三目运算符(三元运算符)用法详解

我们从一个具体的例子切入本节内容。假设现在有两个数字&#xff0c;我们希望获得其中较大的一个&#xff0c;那么可以使用 if else 语句&#xff0c;例如&#xff1a; if a>b:max a; else:max b; 但是 Python 提供了一种更加简洁的写法&#xff0c;如下所示&#xff1a…

中国棒球青训基地建设·棒球1号位

随着中国棒球事业的发展&#xff0c;建设一批现代化的棒球青训基地已经成为了中国棒球发展的必然趋势。下面是有关中国棒球青训基地建设的课题报告&#xff1a; 一、基地选址和规划 中国棒球青训基地的选址应该优先考虑地理位置、气候条件、基础设施和交通便利等因素。基地应该…

OpenGL模型控制(旋转、平移)

1.效果图 2.平移 首先做一个鼠标双击事件&#xff0c;表示平移模型对象&#xff0c;当然&#xff0c;我们需要遍历当前哪个模型对象被选中&#xff0c;才能进行该对象的平移操作。 void AXBOpemglWidget::mouseDoubleClickEvent(QMouseEvent *event) {Q_UNUSED(event);if(m_m…

06- c语言指针 (C语言)

一 指针的引入 1、一般把内存中的一个字节称为一个内存单元。 2、为了正确地访问这些内存单元&#xff0c;必须为每个内存单元编上号。根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址&#xff0c;通常也把这个地址称为指针。 3、如果在程序中定义…

kubernetes入门案例

kubernetes入门案例 本文我们通过一个 Java Web 应用例子来介绍 kubernetes 的使用&#xff0c;可以让新手快速上手和实践。 此 Java Web 应用的结构比较简单&#xff0c;是一个运行在 Tomcat 里的 Web App&#xff0c;JSP 页面通过 JDBC 直接访问 MySQL 数据库并展示数据。…

975-操作系统内存管理课件(2)

基本分页存储管理 基本地址变换结构 具有快表的地址变换结构 两级页表
最新文章