DotNet关键知识点——WPF篇(一)(范德成编辑批注版)

1. Journal 的使用

Journal 用于在 XAML 浏览器应用程序(XBAP)中维护历史访问页。删除前一访问页只需调当前 NavigationService 对象的 RemoveBackEntry() 即可;而增加一个访问页则复杂得多:

1) 实现一个 CustomContentState 的派生类,每个对象对应一个要保存的访问页,其中数据结构用于维护这个历史访问页的数据,在构造的时候通过适当的参数传入。它必须标上 Serializable() 属性。在这个类里要重载一个 Replay 方法和一个 JournalEntryName。Replay 一般通过向构造时传入的页面回调提供数据,恢复出历史页面。JournalEntryName 就是这个项目显示在访问历史下拉列表中的名称。

2) 相关页面需要实现 IProvideCustomContentState 接口。这个接口必须实现 GetContentState 函数,这个函数用于在当前页面上发生浏览切换时对浏览服务 NavigationService 提供一个 CustomContentState。

3) 在需要保存的状况下(如用户对页面进行变动时)对页面调用 NavigationService.AddBackEntry 手动进行快照。

2. NavigationService 的事件

 

页面浏览事件不是接力事件(Routed Events),且在一切的浏览过程中(如通过 NavigationService 调用或超链接访问)均会发生。以下依次罗列一次页面浏览发生的事件:

Navigating开始转向指定的页面
Navigated浏览启动后但最终页面送达之前发送的一个事件
NavigationProgress在页面加载过程中每传送1KB数据发生的一个事件
LoadCompleted页面送达后发送的第一个事件
FragmentNavigation如果访问指向目标页面的某个单元,则在转向该单元时发送这个事件

此外 NavigationStopped 和 NavigationFailed 分别表示 StopLoading 导致浏览取消(不包括在 Navigating 事件响应中 Cancel)和浏览目标页面失败的事件。

3. WPF的后台任务

msdn 上有个例子值得一看,它同时详细说明了 BackgroundWorker 和 Monitor 的使用:

http://msdn.microsoft.com/library/system.threading.monitor.pulse(VS.95).aspx

注意其中多个 m_worker 通过 ProgressChanged 回调对 outputBlock.Text 可以做到直接且互斥的访问,说明 WPF 的后台任务是一种不同于一般线程的特殊的机制(小范蛙注:很有可能是通过 Windows API 中的 SendMessage 或类似的机制,这种机制在 .NET Framework 中也有应用,即控件的 Invoke 方法,它通过在控件所在的窗口线程上 [而非调用它的线程上] 执行方法来避免非串行的调用)。如果不使用这个方法,就需要在线程中调 m_worker.ReportProgress 的地方改用调 outputBlock.Dispatcher.BeginInvoke 的方法更新 outputBlock 内容。

4. 工程中的Settings

在工程属性中的 Settings 可以作为 Properties.Settings.Default 的同名属性(由开发环境即时生成)直接访问,并且类型一致。调用 Properties.Settings.Default.Save 方法即可保存。这和基于 XML 保存的 Application Settings 不同。(小范蛙补充:这个是自动生成的类,是强类型的,有助于避免程序引用不存在的设置项。)

5. 命令

命令相对事件来说比较独立。命令的组成:

1) 命令定义:定义一个命令。类型为 RoutedUICommand,通常作为静态属性封装在一个类中。

2) 命令绑定:连接命令和(多个)处理函数的桥梁。有代码绑定(UIElement 的 CommandBindings 集合)和 XAML 直接绑定两种方法。通过各层单元的命令绑定,实现命令上浮式(Bubbling)搜索。(注意,命令不同于事件接力,其传递过程中一旦遇到处理方法,就不再继续传递,参考资料 2 似乎也报告了这个问题)

3) 命令激发:触发命令的条件。主要有控件直接触发(实现 ICommandSource 控件的 Command 属性)、手势触发(命令的 InputGestures 集合,可在构造时添加)和代码触发(命令的 Execute 方法)三种方法。

6. 事件

接力事件(或路由事件,Routed Events)完全奉行下沉式(Tunneling)和上浮式(Bubbling)接力过程。事件处理方法可以通过 XAML 直接静态绑定,或用 AddHandler(或 += 操作)动态绑定(小范蛙注:此处 AddHandler 不是指 VB.NET 的关键词 AddHandler)。

参考资料

1. http://msdn.microsoft.com/magazine/cc785480.aspx#id0190070
2. http://social.msdn.microsoft.com/forums/wpf/thread/1fb817dc-4f6f-4d2c-8bdf-624b26a0ed45/
3. http://joshsmithonwpf.wordpress.com/2008/03/18/understanding-routed-commands/ (这则会导引至 CodeProject 和 MSDN 的几篇比较深入的文章)

转载于:https://www.cnblogs.com/quanben/archive/2009/11/18/3128938.html

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

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

相关文章

若川的2018年度总结,平淡无奇

可以点击上方的标签若川的故事、年度总结,查看往期文章偷偷告诉你,公众号内回复【报告】,可以获取你自己的github 2020 年度报告昨晚在我的6个微信群里都发了红包,以这样的方式跨过了2020年。运营公众号真的挺难的,比如…

Simple TCP Server Client Socket C

转载链接&#xff1a;http://blog.163.com/caipeipei_love126/blog/static/2596603220101118433940/ tcpserver.c #include<stdlib.h> #include<stdio.h> #include<errno.h> #include<string.h> #include<netdb.h> #include<sys/types.h>…

基于dnn的车牌识别_自然场景中文文字识别,身份证火车票都能识别

图像处理中OCR(Optical Character Recognition光学字符识别)场景非常多&#xff0c;也给大家的工作生活带来了很多便利&#xff0c;比如车牌识别就能管理停车场车辆的出入&#xff0c;快递时只需给一个带有快递信息的图就能自动解析上传发件信息和收件信息&#xff0c;再比如我…

年末的大厂前端面试总结(20届双非二本)-终入字节

关注若川视野, 回复"pdf" 领取资料&#xff0c;回复"1"&#xff0c;可加群长期交流学习自我介绍双非二本,软件工程,自学前端,今年毕业。喜欢编程,古风,日语和英语。常以冷月心之名混迹前端江湖,也曾在混迹网文圈时用冷月心做笔名签约掌阅,作品《清起风云》…

面试题(转的)

第一组   1.烧一根不均匀的绳&#xff0c;从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子&#xff0c;问如何用烧绳的方法来计时一个小时十五分钟呢?  2.你有一桶果冻&#xff0c;其中有黄色、绿色、红色三种&#xff0c;闭上眼睛抓取同种颜色的两个。抓取多少个…

python三酷猫_洛克王国三代酷猫登场 冰水酷猫解析

洛克王国三代酷猫登场 冰水酷猫解析 洛克王国三代武斗酷猫解析三代水灵&#xff0c;在哥斯拉的倾情推荐下&#xff0c;小洛克们都已经很熟悉了吧&#xff01;那和水灵同一期出现的帅哥——武斗酷猫&#xff0c;如果三代遗传了&#xff0c;会怎么样呢&#xff1f;小洛克们一起来…

Linux禁止用户登录

转载链接&#xff1a;http://blog.sina.com.cn/s/blog_4cebadd10100a9bl.html 我们在做系统维护的时候&#xff0c;希望个别用户或者所有用户不能登录系统&#xff0c;保证系统在维护期间正常运行。这个时候我们就要禁止用户登录。 1、禁止个别用户登录。比如禁止lynn用户登录…

.NET常用功能和代码[总结与收藏]

1. 打开新的窗口并传送参数&#xff1a; 传送参数&#xff1a;response.write("<script>window.open(*.aspx?id"this.DropDownList1.SelectIndex"&id1"...")</script>") 接收参数&#xff1a;string a Request.QueryString(&q…

topcoder srm 305 div1

problem1 link 直接按照题意模拟即可。 import java.util.*; import java.math.*; import static java.lang.Math.*;public class UnfairDivision {public int albertsShare(int[] assets) {final int nassets.length;for(int i1;i<n;i) {assets[i]assets[i-1];}int result0…

动图演示23个鲜为人知的VSCode快捷键

原文地址&#xff1a;https://dev.to/devmount/23-lesser-known-vs-code-shortcuts-as-gif-80尽管我在VS Code中经常使用许多快捷方式&#xff0c;以下快捷方式可能会派上用场&#xff0c;但我经常忘记它们的存在。我制作了一些GIF&#xff0c;以便更好地记住它们。也许这里面也…

使用C语言进行面向对象的开发--GObject入门[5]

转载请注明出处 blog.csdn.net/pingf0 或www.cnblogs.com/pingf 接上文这一部分简要介绍下类的析构&#xff0c;或者成为终结。还是多说几句&#xff0c;也算是对前文的补充1.生成一个类是由父到子&#xff0c;析构的时候自然与之相对是由子到父。2.GObject的内存管理并没有采用…

python结课报告_Python数据分析课程到底是学什么内容的?

2020年12月4日&#xff0c;博为峰旗下学掌门召开了《Python 商业(大)数据分析师》新课程发布会。据悉&#xff0c;此次发布会上发布的《Python 商业(大)数据分析师》课程是在原《数据分析师》课程上进行了全面升级。在发布会上博为峰副总经理王琰表示&#xff0c;在未来学掌门作…

linux禁止root用户直接登录sshd并修改默认端口

转载链接&#xff1a;http://jingyan.baidu.com/article/a681b0de3a657c3b184346d9.html linux最高权限用户root&#xff0c;默认可以直接登录sshd。为了提高服务器的安全度&#xff0c;需要对它进行禁止&#xff0c;使得攻击者无法通过暴力破解来获取root权限。 1,新建一个用…

面试官问:能否模拟实现JS的bind方法(高频考点)

可以点击上方的话题JS基础系列&#xff0c;查看往期文章写于2018年11月21日&#xff0c;发布在掘金阅读量1.3w前言这是面试官问系列的第二篇&#xff0c;旨在帮助读者提升JS基础知识&#xff0c;包含new、call、apply、this、继承相关知识。面试官问系列文章如下&#xff1a;感…

推荐一个ASP.NET的资源网站

推荐一个ASP.NET的资源网站&#xff1a;ASP.NET屋-专业的ASP.NET学习,ASP.NET源码,ASP.NET演示,MVC,Silverlight,JQuery,EXTJS,软件设计网站 http://www.aspx58.com.cn/ 转载于:https://www.cnblogs.com/yuyichen/archive/2009/11/26/1611682.html

连续投影算法_中航国画荣获“2020 IAV国际视听嘉年华” 大屏幕投影显示行业三大奖项!...

近日&#xff0c;“2020IAV国际视听嘉年华”在深圳湾创新生态园隆重举行&#xff0c;航空工业上电下属子公司中航国画作为2020年迪拜世博会中国馆官方合作伙伴应邀参加此次高峰论坛&#xff0c;并在展会期间凭借4K系列双色激光工程投影机、LP160UL系列超高亮度双色激光工程投影…

Linux 系统备份恢复工具 SYSTEM-RESCUE-CD 的使用

测试系统&#xff1a;linux-debian 备份系统 1、插入dd有systemrescuecd-x86-4.0.1.iso的系统备份恢复U盘&#xff1b; 2、开机按DEL进入BIOS&#xff0c;设置BOOT为USB-HDD启动。Save&Exit&#xff1b; 3、进入备份恢复系统界面&#xff1a;----------------------------…

CMDB功能分析与实现方案

CMDB功能分析与实现方案 CMDB系统的主要功能 1.用户管理,记录测试,开发,运维人员的用户表 2.业务线管理,记录业务的详情 3.项目管理,指定此项目属于那一条业务线 4.应用管理,指定此应用的开发人员 5.主机管理,记录主机管理员,连接的网络设备,存储,云主机,物理主机等信息 6.主机…

感冒

看好这个网页&#xff0c;你的感冒就好了转载于:https://www.cnblogs.com/baoguo/archive/2009/11/27/1612308.html