WPF基礎之基元素

2022-02-10 02:47:46 字數 3518 閱讀 9382

windows presentation foundation (wpf) 中的大部分類都從四個類派生而來,這四個類在 sdk 文件中常常被稱為基元素類。這些類包括 uielement、frameworkelement、contentelement 和 frameworkcontentelement。dependencyobject 也是乙個相關類,因為它是 uielement 和 contentelement 的通用基類。

wpf 類中的基元素 apiuielement 和 contentelement 都是從 dependencyobject 派生而來,但途徑略有不同。此級別上的拆分涉及到 uielement 或 contentelement 如何在使用者介面上使用,以及它們在應用程式起到什麼作用。uielement 在其類層次結構中也有 visual,該類為 windows presentation foundation (wpf) 公開較低階別的圖形支援。visual 通過定義獨立的矩形螢幕區域來提供呈現框架。實際上,uielement 適用於支援大型資料模型的元素,這些元素用於在可以稱為矩形螢幕區域的區域內進行呈現和布局,在該區域內,內容模型特意設定得更加開放,以允許不同的元素進行組合。contentelement 不是從 visual 派生的;它的模型由其他物件(例如,閱讀器或檢視器,用來解釋元素並生成完整的 visual 供 windows presentation foundation (wpf) 使用)來使用 contentelement。某些 uielement 類可用作內容宿主:它們為乙個或多個 contentelement 類(如 documentviewer)提供宿主和呈現。contentelement 用作以下元素的基類:所具有的物件模型較小,並且多用於定址可能宿主在 uielement 中的文字、資訊或文件內容。

框架級和核心級uielement 用作 frameworkelement 的基類,contentelement 用作 frameworkcontentelement 的基類。對於此下一級類,原因是要支援與 wpf 框架級相分離的 wpf 核心級,這種分離還存在於 api 如何在 presentationcore 和 presentationframework 程式集之間進行劃分。wpf 框架級為基本應用程式需要提供了乙個更完整的解決方案,包括用於表示的布局管理器的實現。wpf 核心級提供了一種方法,以充分利用 wpf,而又不至於產生附加程式集開銷。對於大多數典型的應用程式開發方案而言,這些級別之間的區別很少有影響,而且一般情況下應將 wpf api 視為乙個整體,而無需擔心 wpf 框架級與 wpf 核心級之間有何區別。如果您的應用程式設計選擇替換大量 wpf 框架級功能,例如,如果您的整體解決方案已經有其自己的使用者介面 (ui) 組合和布局實現,則可能需要了解級別之間的差異。

選擇從哪個元素派生建立用於擴充套件 wpf 的自定義類的最實用方法是從某個 wpf 類中派生,這樣您可以通過現有的類層次結構獲得盡可能多的所需功能。本節列出了三個最重要的元素類附帶的功能,以幫助您決定要從哪個類進行派生。

如果您要實現控制項(這的確是從 wpf 類派生的更常見的原因之一),您可能需要從以下類中派生:實際控制項、控制項系列基類或至少是 control 基類。

如果您不是建立控制項,並且需要從層次結構中較高的類進行派生,則可以參考下列各節的內容,了解每個基元素類定義了哪些特徵。

如果您建立從 dependencyobject 派生的類,則將繼承以下功能:

getvalue 和 setvalue 支援以及一般的屬性系統支援。

使用依賴項屬性以及作為依賴項屬性實現的附加屬性的能力。

如果您建立從 uielement 派生的類,則除了能夠繼承 dependencyobject 提供的功能外,還將繼承以下功能:

對動畫屬性值的基本支援。

對基本輸入事件和命令的支援。

可以重寫以便為布局系統提供資訊的虛方法。

如果您建立從 frameworkelement 派生的類,則除了能夠繼承 uielement 提供的功能外,還將繼承以下功能:

對樣式設定和演示圖板的支援。

對資料繫結的支援。

對動態資源引用的支援。

對屬性值繼承以及元資料中有助於向框架服務報告屬性的相關情況(如資料繫結、樣式或布局的框架實現)的其他標誌的支援。

邏輯樹的概念。

對布局系統的實際 wpf 框架級實現的支援,包括 onpropertychanged 重寫(該重寫可以檢測到影響布局的屬性更改)。

如果您建立從 contentelement 派生的類,則除了能夠繼承 dependencyobject 提供的功能外,還將繼承以下功能:

對動畫的支援。

對基本輸入事件和命令的支援。

如果您建立從 frameworkcontentelement 派生的類,則除了能夠繼承 contentelement 提供的功能外,還將獲得以下功能:

對樣式設定和演示圖板的支援。

對資料繫結的支援。

對動態資源引用的支援。

對屬性值繼承以及元資料中有助於向框架服務報告屬性情況(如資料繫結、樣式或布局的框架實現)的其他標誌的支援。

您不會繼承對布局系統修改(如 arrangeoverride)的訪問許可權。布局系統實現只在 frameworkelement 上提供。但是,您會繼承 onpropertychanged 重寫(可以檢測影響布局的屬性更改並將這些更改報告給任何內容宿主)。

記錄了各種類的內容模型。如果您要找到乙個合適的類以便從該類進行派生,其內容模型是乙個應該考慮的可能因素。

其他基類dispatcherobjectdispatcherobject 為 wpf 執行緒模型提供支援,並允許為 wpf 應用程式建立的所有物件與 dispatcher 相關聯。即使您不從 uielement, dependencyobject 或 visual 派生,也應考慮從 dispatcherobject 派生,以獲得此執行緒模型支援。

visualvisual 實現二維物件在近似矩形的區域中通常需要具有視覺化表示的概念。visual 的實際呈現發生在其他類中(不是獨立的),但是 visual 類提供了乙個由各種級別的呈現處理使用的已知型別。visual 實現命中測試,但它不公開報告命中測試結果的事件(這些都位於 uielement 中)。

freezablefreezable 通過在出於效能原因需要不可變物件時提供為物件生成副本的途徑,來模擬可變物件的不變性。freezable 型別為某些圖形元素(如幾何形狀、畫筆以及動畫)提供了乙個通用的基礎。值得注意的是,freezable 不是乙個 visual;當應用 freezable 以填充另乙個物件的屬性值時,它包含的屬性將變成子屬性,而這些子屬性可能會影響呈現。

animatableanimatable 是乙個 freezable 派生類,它特別新增了動畫控制項層和某些實用工具成員,從而使當前動畫的屬性可以與未動畫的屬性區分開。

controlcontrol 是稱為控制項或元件(取決於技術)的物件型別的理想基類。一般而言,wpf 控制項類是直接表示 ui 控制項或積極參與控制項組合的類。control 實現的主要功能是控制項模板化。

摘自:

WPF快速指導8 WPF基元素類

wpf快速指導8 wpf基元素類 1 什麼是基元素類 2 基元素類的使用 3 其它重要基類 1 什麼是基元素類 wpf中的大部分類都是從 sdk 文件中通常稱為基元素類的四個類派生而來。這些類包括 uielement frameworkelement contentelement 和 framewo...

WPF基礎系列之 屬性

一 屬性的前世今生 程式的本質是 資料 演算法 或者說是用演算法來處理資料以期得到輸出結果。在程式中,資料表現為各種各樣的變數,演算法則表現為各種各樣的函式 操作符是函式的簡記法 物件導向的類只是把散落在程式中的變更和函式進行歸檔封裝並控制對它們的訪問而已。被封裝在類裡的變更稱為字段,它表示類或例項...

WPF基礎系列之 資源

一 資源分類 程式級資源 也稱為二進位制資源,將資料儲存在程式主體之外的檔案裡。外部檔案與程式主體分離,為避免丟失或損壞,編譯器充許把外部檔案編譯程序式主體 成為程式主體不可分割的一部分,即為傳統意義上的程式資源。物件級資源 每個介面元素都可以攜帶自己的資源並可被自己的子級元素共享。wpf可同時支援...