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.pswp.cn/news/276314.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276314.shtml
英文地址,請注明出處:http://en.pswp.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