日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

了解WPF框架

發布時間:2023/12/14 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 了解WPF框架 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首當其沖的,自然是System.Object類了。這里主要想說的是,WPF的大部分代碼都是使用托管代碼編寫,原因是因為CLR的許多不錯的特性(如內存管理、錯誤處理、通用類型系統等。),可以讓開發的程序更有效、更健壯。但是,框架并不是所有代碼都是托管的,也有一部分是由非托管代碼編寫。原因主要是因為WPF是展現層框架,它的顯示需要和DirectX很緊密的集成起來,進行硬渲染和軟渲染,以得到性能上的提升。
??? 下面的結構圖中,紅色部分是屬于WPF框架的。其中,只有milcore這個部分是采用非托管代碼編寫。所以,可以看出,我們在使用WPF的時候,是不會接觸到里面的非托管代碼的。

DispatcherObject(異步)
??? 命令空間:System.Threading。 ??? WPF Dispatcher使用User32的消息機制來實現跨線程調用。工作機制類似Win32的消息泵。 ??? WPF的線程模型和User32的線程模型保持一致,使用STA。主要原因是互可操作性,因為現在的很多系統都是需要STA的,如IE、OLE2.0、剪貼板等。 ??? 通過Dispatcher,我們可以實現線程間的通信。繼承自DispatcherObejct的類,都獲取了一個所在線程的Dispatcher引用,這樣,任何使用這個類的對象的線程,都可以使用它的Dispatcher來發送“消息”。 一般情況下,我們使用這個類的意圖主要是異步線程調用DispatcherObject的Dispather來讓DispatcherObject的創建線程做一些特定的事情,如設置界面上某個值。這樣大大方便了我們開發人員。想想我原來用WindowsForm開發的時候,為了異步調用顯示一下Label,寫出來的代碼真是夠繁瑣。
DependencyObject(屬性)
??? 命令空間:System.Windows。 ???? WPF框架中最主要的思想之一是:優先使用屬性,而不是事件、方法。 ??? 繼承自DependencyObject的類,就擁有了WPF特別定制的“富”屬性系統。該屬性系統提供了以下好處: ??? 1. Dependency Property:“依賴”的屬性,自動檢測依賴性的屬性表達式,當被依賴的屬性變化時,自動更新屬性值。 ??? 2. 使用盡量少的屬性值存儲空間。因為并不是每一個屬性都會存儲在內存中。 ??? 3. Attached Property:任何一個類都允許使用其它的類定義的任何依賴屬性。(類似于javascript的expando特性。)
Visual(集成、繪制)
??? 命令空間:System.Windows.Media。 ??? Visual類才真正是WPF的入口點。就是在這里,整合了托管代碼API和非托管代碼milcore。 ??? WPF使用milcore中的一種叫Composition Nodes的數據結構來進行顯示。這種數據結構類似一棵樹,樹的每個節點都帶有繪制的指令。Visual以及Visual的子類,可以通過消息協議來和Composition Nodes進行通信。(每一個Visual,可能會建立零到多個不等的Composition Nodes。)重點是:Visual的整棵樹及其所附屬繪制指令,都會被緩存起來。這樣,整個系統可以進行高速的重繪,也不會因為用戶程序的阻塞而阻塞顯示。 ??? 在User32和GDI中,系統是通過一種盒子方式來進行繪制的:每一個成員都被放在一個指定的區域里面進行繪制,然后再疊加再一起。這樣生成的圖象中的每一個象素,其實都只屬于唯一一個成員。但是是WPF系統中,使用的是"painter’s algorithm"繪制算法:從后到前,一個一個的畫出這些成員。這樣的話,后畫出來的成員就在已經繪制好的圖案上繼續進行繪制,就可以顯示出一些復雜的半透明的圖形。 ??? 而“屬性優先”的思想,在Visual類中也有所體現。如,我們原來熟悉的DrawLine()/DrawLine()方式,現在變成了new Line()/new Line()。這種數據驅動的編程方式,可以讓我們使用屬性來完成一些復雜的繪制操作。又如,動畫的使用方式,也是完全的使用屬性聲明方式。
UIElement(界面基礎)
??? 命令空間:System.Windows。
??? UIElement提供了很多PresentationCore程序集中比較重要的特性:

  • 布局: ??? 布局系統中,比較重要的是Measure和Arrage這兩個階段。 ??? Measure過程讓一個成員決定它到底需要多大的尺寸。很多情況下,父元素經常會多次詢問子元素所需要的尺寸,然后再決定給它一個比較合適的最終尺寸。這就是WPF中另一個重要思想:Size To Content。這樣,WPF中所有的控件,都可以控制自己的顯示尺寸,使其大小和控件的內容比較協調。
  • 輸入、事件: ??? 在WPF中事件模型中最基本的、不同于以往應用程序的變化是“事件路由模型”。操作系統收到從硬件發出的輸入信號后,導向相應的進程、線程。當這些關于輸入信息的Win32消息被傳送到WPF中時,會被轉換成WPF最原始的輸入信號并發送到Dispatcher“發報機”中。WPF可能會把一個原始的信號轉換成多個與之相應的事件。 ??? 這里需要說一下,這里事件路由的概念。每個輸入發生時,會被轉換成兩個具體的事件,一個preview event和一個一般事件。一個事件從控件樹上發生事件的目標節點,依次傳到最上層的根節點的方式,叫作“bubble”。另一種相反的方式被叫作“tunnel”。preview event就是一個正在進行tunnel的事件。這樣,可以先讓所有元素都有機會對事件進行過濾,或者發生一些特定的行為。然后這個事件又被從目標節點依次bubble回到根節點。 ??? 另外,不象Win32中的應用程序只有一個"TranslateAccelerator"(用來控制如“Ctrl+N”這樣的組合鍵),因為WPF系統是“組合”
  • 總結

    以上是生活随笔為你收集整理的了解WPF框架的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。