基底項目概觀

Windows Presentation Foundation (WPF) 中較高百分比的類別衍生自 SDK 檔中通常稱為基底元素類別的四個類別。 這些類別為 UIElementFrameworkElementContentElementFrameworkContentElement 。 類別 DependencyObject 也相關,因為它是 和 的 UIElement 通用基類 ContentElement

WPF 類別中的基底項目 API

UIElementContentElement 都是透過稍微不同的路徑衍生自 DependencyObject 。 此層級的分割會處理 UIElement 如何在使用者介面中使用 或 ContentElement ,以及他們在應用程式中提供什麼用途。 UIElementVisual其類別階層中也有 ,這是一個類別,可公開基礎 Windows Presentation Foundation (WPF) 基礎的較低層級圖形支援。 Visual 藉由定義獨立的矩形螢幕區域來提供轉譯架構。 實際上, UIElement 適用于將支援較大物件模型的元素,旨在將和版面配置轉譯成可描述為矩形螢幕區域的區域,以及 con帳篷模式l 刻意更開放的地方,以允許不同的元素組合。 ContentElement 不是衍生自 Visual ;其模型是 ContentElement 其他專案會取用 ,例如讀取器或檢視器,然後解譯元素並產生完整的 Visual Windows Presentation Foundation (WPF) 取用。 某些 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 的類別,您會繼承下列功能:

  • GetValueSetValue 支援,以及一般屬性系統支援。

  • 可以使用相依性屬性以及實作為相依性屬性的附加屬性。

如果您建立衍生自 UIElement 的類別,除了 所提供的 DependencyObject 功能之外,您也會繼承下列功能:

  • 動畫屬性值的基本支援。 如需詳細資訊,請參閱 動畫概觀

  • 基本輸入事件支援和命令支援。 如需詳細資訊,請參閱輸入概觀命令概觀

  • 可覆寫以將資訊提供給配置系統的虛擬方法。

如果您建立衍生自 FrameworkElement 的類別,除了 所提供的 UIElement 功能之外,您也會繼承下列功能:

  • 樣式和分鏡腳本的支援。 如需詳細資訊,請參閱 Style 分鏡腳本概觀

  • 資料繫結的支援。 如需詳細資訊,請參閱 資料繫結概觀

  • 動態資源參考的支援。 如需詳細資訊,請參閱 XAML 資源

  • 屬性值繼承支援,以及中繼資料中協助向架構服務報告屬性條件的其他旗標,例如資料繫結、樣式或配置架構實作。 如需詳細資訊,請參閱架構屬性中繼資料

  • 邏輯樹狀結構的概念。 如需詳細資訊,請參閱 WPF 中的樹狀結構

  • 支援配置系統的實際 WPF 架構層級實作,包括 OnPropertyChanged 可偵測影響版面配置之屬性變更的覆寫。

如果您建立衍生自 ContentElement 的類別,除了 所提供的 DependencyObject 功能之外,您也會繼承下列功能:

如果您建立衍生自 FrameworkContentElement 的類別,除了 提供 ContentElement 的功能之外,您還可以取得下列功能:

  • 樣式和分鏡腳本的支援。 如需詳細資訊,請參閱 Style 動畫概觀

  • 資料繫結的支援。 如需詳細資訊,請參閱 資料繫結概觀

  • 動態資源參考的支援。 如需詳細資訊,請參閱 XAML 資源

  • 屬性值繼承支援,以及中繼資料中協助向架構服務報告屬性條件的其他旗標,例如資料繫結、樣式或配置架構實作。 如需詳細資訊,請參閱架構屬性中繼資料

  • 您不會繼承版面配置系統修改的存取權(例如 ArrangeOverride )。 版面配置系統實作僅適用于 FrameworkElement 。 不過,您可以繼承覆 OnPropertyChanged 寫,以偵測影響版面配置的屬性變更,並將這些變更報告給任何內容主機。

會記錄各種類別的內容模型。 如果您想要尋找從中衍生的適當類別,則類別的內容模型是您應該考慮的一個可能因素。 如需詳細資訊,請參閱 WPF 內容模型

其他基底類別

DispatcherObject

DispatcherObject 提供 WPF 執行緒模型的支援,並讓為 WPF 應用程式建立的所有物件都與 Dispatcher 相關聯。 即使您不是衍生自 UIElementDependencyObjectVisual ,您也應該考慮衍生自 DispatcherObject ,以便取得此執行緒模型支援。 如需詳細資訊,請參閱執行緒模型

視覺效果

Visual 會實作 2D 物件的概念,這個物件通常需要在大約矩形區域中的視覺呈現。 實際轉 Visual 譯在其他類別中發生(它不是獨立式),但 類別 Visual 會提供一種已知類型,供不同層級的轉譯程式使用。 Visual 會實作點擊測試,但不會公開報告點擊測試陽性的事件(這些是在 UIElement 中)。 如需詳細資訊,請參閱視覺分層程式設計

Freezable

Freezable 藉由提供在需要不可變物件或基於效能考慮而需要不可變物件時產生物件的複本的方法,來模擬可變物件中的不變性。 此 Freezable 類型提供特定圖形元素的常見基礎,例如幾何和筆刷,以及動畫。 值得注意的是, Freezable 不是 Visual ;當 套用 以填滿另一個物件的屬性值時 Freezable ,它可以保存成為子屬性的屬性,而這些子屬性可能會影響轉譯。 如需詳細資訊,請參閱 Freezable 物件概觀

Animatable

Animatable 是衍生 Freezable 類別,專門新增動畫控制層和一些公用程式成員,以便讓目前動畫屬性與非動畫屬性區別。

控制

Control 是物件類型的預期基類,視技術而定,這些物件類型以各種方式稱為控制項或元件。 一般而言,WPF 控制項類別是直接代表 UI 控制項或密切參與控制群組合的類別。 啟用的主要功能 Control 是控制範本化。

另請參閱