共用方式為


架構屬性中繼資料

針對在 Windows Presentation Foundation (WPF) 架構中視為 WPF 架構層級的物件項目屬性,報告架構屬性中繼資料選項。 WPF 架構層級指定一般會需要由 WPF 簡報 API 和可執行檔處理的轉譯、資料繫結和屬性系統調整等功能。 這些系統會查詢架構屬性中繼資料,以判斷特定項目屬性的特定功能特性。

必要條件

本主題假設您已從 Windows Presentation Foundation (WPF) 類別的現有相依性屬性消費者角度了解相依性屬性,並已閱讀相依性屬性概觀主題。 您也應該已閱讀相依性屬性中繼資料

架構屬性中繼資料通訊的內容

架構屬性中繼資料可分成下列分類︰

  • 報告會影響元素的版面配置屬性 (AffectsArrangeAffectsMeasureAffectsRender)。 如果屬性會影響這些個別層面,您可在中繼資料中設定這些旗標,也要在您的類別中實作 MeasureOverride / ArrangeOverride 方法,提供特定的轉譯行為和版面配置系統資訊。 一般而言,這類實作會檢查相依性屬性是否屬性失效,這些相依性屬性在屬性中繼資料中的任何配置屬性都是 true,而且只有這些失效需要要求新的配置傳遞。

  • 報告會影響專案父元素的版面配置屬性 (AffectsParentArrangeAffectsParentMeasure)。 預設會設定旗標的範例是 FixedPage.LeftParagraph.KeepWithNext

  • Inherits. 相依性屬性預設不繼承值。 OverridesInheritanceBehavior 讓繼承路徑也可以在視覺化樹狀結構中移動,它對某些控制項複合案例是必要的。

    注意

    屬性值內容中的「繼承」一詞表示相依性屬性的特定項目,它表示因為 WPF 屬性系統的 WPF 架構層級功能,子項目可以繼承父項目的實際相依性屬性值。 它和 Managed 程式碼類型及透過衍生類型的成員繼承沒有直接關係。 如需詳細資訊,請參閱屬性值繼承

  • 報告資料繫結的特性 (IsNotDataBindableBindsTwoWayByDefault)。 根據預設,架構中的相依性屬性以單向繫結行為支援資料繫結。 如果沒有任何案例,您可能會停用資料繫結 (因為它們具有彈性且可延伸,所以預設的 WPF API 中沒有太多這類屬性的範例)。 您可能會為屬性設定雙向預設值的繫結,此屬性會將元件組件間的控制項行為繫結在一起 (例如 IsSubmenuOpen),或其雙向繫結對使用者而言是一般且預期的案例 (例如 Text)。 對預設值一律可以變更的每個繫結而言,變更與資料繫結相關的中繼資料只會影響預設值。 如需繫結模式和一般繫結的詳細資訊,請參閱資料繫結概觀

  • 報告屬性應該由支援日誌功能的應用程式或服務記錄日誌 (Journal)。 一般項目預設不啟用日誌功能,但某些使用者輸入控制項會選擇性地啟用。 此屬性原由日誌服務讀取,包括 WPF 實作日誌功能,通常設定在使用者控制項,例如在所有瀏覽步驟都應保存之清單的使用者選取範圍。 如需日誌的相關資訊,請參閱巡覽概觀

讀取 FrameworkPropertyMetadata

上述連結的每個屬性都是 FrameworkPropertyMetadata 新增至其實即時基底類別 UIPropertyMetadata 的特定屬性。 這些屬性每一個預設都是 false。 知道這些屬性值很重要的屬性中繼資料要求,應嘗試將傳回的中繼資料轉換成 FrameworkPropertyMetadata,然後視需要檢查個別屬性的值。

指定中繼資料

當您為將中繼資料套用至新的相依性屬性登錄,而建立新的中繼資料執行個體時,您可以選擇要使用的中繼資料類別︰基底 PropertyMetadata 或一些衍生類別,如 FrameworkPropertyMetadata。 一般應該使用 FrameworkPropertyMetadata,特別是如果您的屬性與屬性系統及版面配置和資料繫結等 WPF 函式有任何互動時。 更複雜情況的另一個選項是衍生自 FrameworkPropertyMetadata,建立在成員中攜帶額外資訊的專屬中繼資料報告類別。 或者,您可以使用 PropertyMetadataUIPropertyMetadata 來傳遞實作功能的支援程度。

對於現有的屬性 (AddOwnerOverrideMetadata 呼叫),您應該一律以原先註冊所使用的中繼資料類型覆寫。

如果要建立 FrameworkPropertyMetadata 執行個體,有兩種方法可將溝通架構屬性特性的特定屬性值填入該中繼資料:

  1. 使用允許 flags 參數的 FrameworkPropertyMetadata 建構函式簽章。 此參數應該填入 FrameworkPropertyMetadataOptions 列舉旗標的所有所需合併值。

  2. 使用其中一個不含 flags 參數的簽章,然後針對每個需要的特性變更,將 FrameworkPropertyMetadata 的每個報告布林值屬性設為 true。 如果這麼做,您必須先設定這些屬性,才能建構具有此相依性屬性的任何項目;布林值屬性為讀寫,以允許此避免 flags 參數的行為,且仍可填入中繼資料,但在屬性使用前必須有效密封中繼資料。 因此,嘗試在要求中繼資料之後設定屬性,是無效的作業。

架構屬性中繼資料合併行為

當您覆寫架構屬性中繼資料時,不同的中繼資料特性會被合併或取代。

此行為是由 Merge 實作,可在衍生的中繼資料類別上覆寫。

另請參閱