【WPF學習】第十五章 WPF事件

来源:https://www.cnblogs.com/Peter-Luo/archive/2020/01/27/12236807.html
-Advertisement-
Play Games

前兩章學習了WPF事件的工作原理,現在分析一下在代碼中可以處理的各類事件。儘管每個元素都提供了許多事件,但最重要的事件通常包括以下5類: 生命周期事件:在元素被初始化、載入或卸載時發生這些事件。 滑鼠事件:這些事件是滑鼠動作的結果。 鍵盤事件:這些事件是鍵盤動作(如按下鍵盤上的鍵)的結果。 手寫筆事 ...


  前兩章學習了WPF事件的工作原理,現在分析一下在代碼中可以處理的各類事件。儘管每個元素都提供了許多事件,但最重要的事件通常包括以下5類:

  •   生命周期事件:在元素被初始化、載入或卸載時發生這些事件。
  •   滑鼠事件:這些事件是滑鼠動作的結果。
  •   鍵盤事件:這些事件是鍵盤動作(如按下鍵盤上的鍵)的結果。
  •   手寫筆事件:這些事件是使用類似鋼筆的手寫筆的結果。在平板電腦上用手寫筆代替滑鼠。
  •   多點觸控事件:這些事件是一根或多根手指在多點觸控屏上觸摸的結果。盡在Windows7中支持這些事件。

一、生命周期事件

  當首次創建以及釋放所有元素時都會引發事件,可使用這些事件初始化視窗。表1-1列出了這些事件,他們是在FrameworkElement類中定義的。

表1-1 所有元素的生命周期事件

   為了弄清Initialized事件和Loaded事件之間的關係,分析一下呈現過程是有幫助的。FrameworkElement類實現了ISupportInitialize介面,該介面提供了兩個用於控制初始化過程的方法。第一個方法是BeginInit(),在實例化元素後立即調用該方法。調用BeginInit()方法後,XAML解析器設置所有元素的屬性(並添加內容)。第二個方法是EndInit(),完成初始化後,將調用該方法,此時引發Initialized事件。

  當創建視窗時,會自下而上地初始化每個元素分支。這意味著,位於深層的嵌套元素在他們的容器之前被初始化。當引發初始化事件時,可確保元素樹中當前元素以下的元素已經全部完成了初始化。但是,包含當前元素的元素可能還沒有初始化,並且不能假定視窗的任何其他部分已經初始化。

  在每個元素都完成初始化後,還需要在他們的容器中進行佈局、應用樣式。如果需要的話,還會綁定到數據源。當引發視窗的Initialized事件後,就可以進入下一階段了。

  一旦完成初始化過程,就會引發Loaded事件。Loaded事件和Initialized事件的發生過程相反——換句話說,包含其他所有元素的視窗首先引發Loaded事件,然後才是更深層的嵌套元素。為所有元素都引發了Loaded事件後,視窗就變得可見了,並且元素都已被呈現。

  視窗還有它自己更特殊的生命周期事件,表1-2列出了這些事件。

表1-2 Windows類的生命周期事件

   如果只對執行控制項的第一次初始化感興趣,完成這項任務的最好時機是在觸發Loaded事件時。通常可在同一位置進行所有初始化,這個位置一般是Window.Load事件的事件處理程式。

二、輸入事件

  輸入事件是當用戶使用某些種類的外設硬體進行交互時發生的事件,例如滑鼠、鍵盤、手寫筆或多點觸控屏。輸入事件可通過繼承自InputEventArgs的自定義事件參數類傳遞額外的信息。如下圖所示,顯示了繼承層次。

圖 輸入事件的EventArgs類


  InputEventArgs類只增加了兩個屬性:Timestamp和Device。Timestamp屬性提供了一個整數,指示事件何時發生的毫秒數(它所代表的實際事件並不重要,但可比較不同的時間戳值以確定哪個事件先發生。事件戳值大的事件是在更近發生的)。Device屬性返回一個對象,該對象提供與觸發事件的設備相關的更多信息,設備可以是滑鼠、鍵盤或手寫筆。這三種可能的設備由不同的類表示,所有這些類都繼承自抽象類System.Windows.Input.InputDevice.

  接下來章節將進一步分析在WPF應用程式中如何處理滑鼠、鍵盤以及多點觸控動作。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 咳咳,這個是為了趕量 需要註意的就是輸入方式,別的也沒什麼難點 Problem Description Ignatius likes to write words in reverse way. Given a single line of text which is written by Igna ...
  • 1 引言 眾所周知,模塊化編程具備很多優點,尤其在複雜項目上體現更為明顯。Python模塊化編程有助於開發者統籌兼顧和分工協作,並提升代碼靈活性和可維護性,是編程開發者不可或缺的一項重要工具。 2 Python模塊 在平時Python編程中,我們所保存的以.py為尾碼的代碼文件(如hello.py) ...
  • import sys from qdarkstyle import load_stylesheet_pyqt5 from PyQt5.QtWidgets import QApplication, QTableView from PyQt5.QtCore import QAbstractTableMo ...
  • 本地127.0.0.1可以訪問到nginx,外網ip無法訪問 解決方法:1,關閉firewall防火牆(系統自帶):service firewalld stop<不推薦>。2,開發某個埠:firewall-cmd --permanent --add-port=80/tcp: <註意重啟才能生效:f... ...
  • pygame 快速入門 目標 1. 項目準備 2. 使用 創建圖形視窗 3. 理解 圖像 並實現圖像繪製 4. 理解 游戲迴圈 和 游戲時鐘 5. 理解 精靈 和 精靈組 項目準備 1. 新建 飛機大戰 項目 2. 新建一個 3. 導入 游戲素材圖片 游戲的第一印象 把一些 靜止的圖像 繪製到 游戲 ...
  • 一、結構(Struct)是CTS中五種基本類型之一,是一種值類型,同樣封裝了同屬一個邏輯單元的數據和行為,這些數據和行為通過結構中的成員表示;結構與類共用大多數相同的語法,但結構比類受到的限制更多,結構適用於表示輕量級類型;使用struct關鍵字定義結構: //定義一個公共結構MyStruct pu ...
  • 大家在使用EntityFrameworkCore的DBFirst的腳手架(Scaffolding)時應該遇到過Build Failed的錯誤,而沒有任何提示,我也遇到過不少次,目前已經完美解決並將排查方法分享給大家: (1)對於要使用腳手架的項目,首先要確保項目是可以正常編譯運行的,在VisualS ...
  • 這是第三篇了,第一篇只是介紹,第二篇介紹了api項目的運行和啟動,如果api項目沒什麼問題了,調試都正常了,那基本上就沒什麼事了,由於這一篇是講前端項目的,所以需要運行angular項目了,由於前端項目是需要調用介面的,好像要配置跨域,跨域這個東西,你可以在asp.net core項目上配置,這樣在 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...