Windows Presentation Foundation (WPF) 中的大部分類都從四個類派生而來這四個類在 SDK 文檔中常常被稱為基元素類這些類包括 UIElementFrameworkElementContentElement 和 FrameworkContentElementDependencyObject 也是一個相關類因為它是 UIElement 和 ContentElement 的通用基類
WPF 類中的基元素 API
UIElement 和 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 重寫(可以檢測影響布局的屬性更改並將這些更改報告給任何內容宿主)
記錄了各種類的內容模型如果您要找到一個合適的類以便從該類進行派生其內容模型是一個應該考慮的可能因素
其他基類
DispatcherObject
DispatcherObject 為 WPF 線程模型提供支持並允許為 WPF 應用程序創建的所有對象與 Dispatcher 相關聯即使您不從 UIElement DependencyObject 或 Visual 派生也應考慮從 DispatcherObject 派生以獲得此線程模型支持
Visual
Visual 實現二維對象在近似矩形的區域中通常需要具有可視化表示的概念Visual 的實際呈現發生在其他類中(不是獨立的)但是 Visual 類提供了一個由各種級別的呈現處理使用的已知類型Visual 實現命中測試但它不公開報告命中測試結果的事件(這些都位於 UIElement 中)
Freezable
Freezable 通過在出於性能原因需要不可變對象時提供為對象生成副本的途徑來模擬可變對象的不變性Freezable 類型為某些圖形元素(如幾何形狀畫筆以及動畫)提供了一個通用的基礎值得注意的是Freezable 不是一個 Visual當應用 Freezable 以填充另一個對象的屬性值時它包含的屬性將變成子屬性而這些子屬性可能會影響呈現
Animatable
Animatable 是一個 Freezable 派生類它特別添加了動畫控件層和某些實用工具成員從而使當前動畫的屬性可以與未動畫的屬性區分開
Control
Control 是稱為控件或組件(取決於技術)的對象類型的理想基類一般而言WPF 控件類是直接表示 UI 控件或積極參與控件組合的類Control 實現的主要功能是控件模板化
From:http://tw.wingwit.com/Article/program/ASP/201311/21854.html