自訂類型和程式庫的 XAML 相關 CLR 屬性

本主題描述 .NET XAML 服務所定義的 Common Language Runtime (CLR) 屬性。 它也描述 .NET 中定義的其他 CLR 屬性,這些屬性具有應用程式對元件或類型的 XAML 相關案例。 利用這些 CLR 屬性將元件、類型或成員歸因於您的類型,提供與類型相關的 XAML 類型系統資訊。 資訊會提供給任何使用 .NET XAML 服務的 XAML 取用者,直接或透過專用的 XAML 讀取器和 XAML 寫入器來處理 XAML 節點資料流程。

使用 CLR 屬性需要您使用整體 CLR 來定義類型,否則無法使用這類屬性。 如果您使用 CLR 來定義型別備份,則 .NET XAML 服務 XAML 寫入器所使用的預設 XAML 架構內容可以透過反省對備份元件讀取 CLR 屬性。

下列各節說明您可以套用至自訂類型或自訂成員的 XAML 相關屬性。 每個 CLR 屬性都會傳達與 XAML 類型系統相關的資訊。 在載入路徑中,屬性化資訊可協助 XAML 讀取器形成有效的 XAML 節點資料流程,或協助 XAML 寫入器產生有效的物件圖形。 在儲存路徑中,屬性化資訊可協助 XAML 讀取器形成有效的 XAML 節點資料流程,以重建 XAML 類型系統資訊;或它會宣告 XAML 寫入器或其他 XAML 取用者的序列化提示或需求。

AmbientAttribute

參考檔:AmbientAttribute

適用于: 支援可附加屬性的類別、屬性或 get 存取子成員。

引數:

AmbientAttribute 表示在 XAML 的環境屬性概念下,應該解譯屬性或採用屬性類型的所有屬性。 環境概念與 XAML 處理器如何判斷成員類別擁有者有關。 環境屬性是一個屬性,在建立物件圖形時,值預期可在剖析器內容中使用,但建立的即時 XAML 節點集會暫停一般類型成員查閱。

環境概念可以套用至可附加成員,這些成員在 CLR 屬性定義 AttributeTargets 的方式方面不會以屬性工作表示。 方法屬性使用方式應該只適用于 get 支援 XAML 可附加使用方式的存取子。

建構函式ArgumentAttribute

參考檔:ConstructorArgumentAttribute

適用于: 類別

引數: 指定符合單一建構函式引數之屬性名稱的字串。

ConstructorArgumentAttribute 指定物件可以使用非無參數建構函式語法初始化,而指定名稱的 屬性則提供建構資訊。 這項資訊主要供 XAML 序列化之用。 如需詳細資訊,請參閱ConstructorArgumentAttribute

ContentPropertyAttribute

參考檔:ContentPropertyAttribute

適用于: 類別

引數: 指定屬性類型成員名稱的字串。

ContentPropertyAttribute 表示 引數所命名的屬性應該做為該類型的 XAML 內容屬性。 XAML 內容屬性定義會繼承至可指派給定義型別的所有衍生類型。 您可以在特定衍生類型上套用 ContentPropertyAttribute ,以覆寫特定衍生類型的定義。

對於做為 XAML 內容屬性的屬性,可以在 XAML 使用方式中省略屬性的屬性專案標記。 一般而言,您可以指定 XAML 內容屬性,以提升內容和內含專案模型的簡化 XAML 標記。 因為只有一個成員可以指定為 XAML 內容屬性,所以您有時有設計選擇,以決定哪一個類型容器屬性應該指定為 XAML 內容屬性。 其他容器屬性必須與明確的屬性元素搭配使用。

在 XAML 節點資料流程中,XAML 內容屬性仍會產生 StartMemberEndMember 節點,並使用 的 屬性 XamlMember 名稱。 若要判斷成員是否為 XAML 內容屬性,請從位置檢查 XamlType 值,並取得 的值 ContentPropertyStartObject

ContentWrapperAttribute

參考檔:ContentWrapperAttribute

適用于: 類別,特別是集合類型。

引數: Type 指定要作為外部內容之內容包裝函式類型的型別。

ContentWrapperAttribute 會指定相關聯集合類型上的一或多個類型,這些類型將用來包裝外部內容。 外部內容是指內容類型系統條件約束在 content 屬性類型上不會擷取 XAML 用於擁有類型的所有可能內容案例的情況。 例如,特定型別內容的 XAML 支援可能支援強型別泛型 Collection<T> 中的字串。 內容包裝函式適用于將預先存在的標記慣例移轉至 XAML 集合可指派值的概念,例如移轉與文字相關的 con帳篷模式ls。

若要指定多個內容包裝函式類型,請多次套用 屬性。

DependsOnAttribute

參考檔:DependsOnAttribute

適用于: 屬性

引數: 指定屬性類型另一個成員名稱的字串。

DependsOnAttribute 表示屬性化屬性相依于另一個屬性的值。 將此屬性套用至屬性定義可確保先在 XAML 物件寫入中處理相依屬性。 的使用 DependsOnAttribute 方式會針對必須遵循特定剖析順序才能建立有效物件的類型,指定屬性的特殊案例。

您可以將多個 DependsOnAttribute 案例套用至屬性定義。

MarkupExtensionReturnTypeAttribute

參考檔:MarkupExtensionReturnTypeAttribute

適用于: 必須是衍生型別的 MarkupExtension 類別。

引數: Type ,指定要預期做為 ProvideValue 屬性 MarkupExtension 化 結果的最精確型別。

如需詳細資訊,請參閱 XAML 的標記延伸概觀

NameScopePropertyAttribute

參考檔:NameScopePropertyAttribute

適用于: 類別

引數: 支援兩種屬性形式:

  • 指定屬性型別上屬性名稱的字串。

  • 指定屬性名稱的字串,以及 Type 定義具名屬性之型別的 。 此表單用於將可附加成員指定為 XAML namescope 屬性。

NameScopePropertyAttribute 指定屬性,這個屬性會提供屬性類別的 XAML 命名範圍值。 XAML namescope 屬性應該參考實作 INameScope 並保存實際 XAML 命名範圍、其存放區和行為的物件。

RuntimeNamePropertyAttribute

參考檔:RuntimeNamePropertyAttribute

適用于: 類別

引數: 指定屬性類型上執行時間名稱屬性名稱的字串。

RuntimeNamePropertyAttribute 會報告對應至 XAML x:Name 指示詞 之屬性之屬性。 屬性的類型必須是 String ,而且必須是可讀寫的。

定義會繼承至可指派給定義型別的所有衍生型別。 您可以在特定衍生類型上套用 RuntimeNamePropertyAttribute ,以覆寫特定衍生類型的定義。

TrimSurroundingWhitespaceAttribute

參考檔:TrimSurroundingWhitespaceAttribute

適用于: 類型

引數: 無。

TrimSurroundingWhitespaceAttribute 會套用至特定類型,這些類型可能會在空白字元重要內容中顯示為子項目(具有 WhitespaceSignificantCollectionAttribute 的集合所保留的內容)。 TrimSurroundingWhitespaceAttribute 主要與儲存路徑相關,但可藉由檢查 XamlType.TrimSurroundingWhitespace ,在載入路徑的 XAML 類型系統中取得。 如需詳細資訊,請參閱 XAML 中的空白字元處理。

TypeConverterAttribute

參考檔:TypeConverterAttribute

適用于: 類別、屬性、方法(唯一 get 的 XAML 有效方法案例是支援可附加成員的存取子)。

引數: TypeTypeConverter

TypeConverterAttribute 在 XAML 內容中參考自訂 TypeConverter 。 這會 TypeConverter 提供自訂類型或該類型成員的類型轉換行為。

TypeConverterAttribute 屬性套用至您的類型,並參考類型轉換器實作。 您可以在類別、結構或介面上定義 XAML 的類型轉換器。 您不需要提供列舉型別轉換,該轉換會以原生方式啟用。

您的類型轉換子應該能夠從用於標記中屬性或初始化文字的字串轉換成您預期的目的地類型。 如需詳細資訊,請參閱 TypeConverters 和 XAML

您也可以在特定屬性上建立 XAML 的類型轉換器行為,而不是套用至類型的所有值。 在此情況下,您會套用 TypeConverterAttribute 至屬性定義(外部定義,而非特定 getset 定義)。

您可以套用 TypeConverterAttributeget 支援 XAML 使用方法存取子的方法存取子,以指派自訂可附加成員的 XAML 使用類型轉換器行為。

類似于 TypeConverterTypeConverterAttribute 存在於 XAML 之前存在於 .NET 中,而類型轉換器模型則提供其他用途。 若要參考及使用 TypeConverterAttribute ,您必須完整限定它,或提供 的 usingSystem.ComponentModel 語句。 在專案中也包含系統元件。

UidPropertyAttribute

參考檔:UidPropertyAttribute

適用于: 類別

引數: 依名稱參考相關屬性的字串。

指出別名為 x:Uid 指示詞 之類別的 CLR 屬性。

UsableDuringInitializationAttribute

參考檔:UsableDuringInitializationAttribute

適用于: 類別

引數: 布林值。 如果用於屬性的預期用途,則值應設定為 true

指出類型是否在 XAML 物件圖形建立期間由上而下建置。 這是一個進階概念,可能與程式設計模型的定義密切相關。 如需詳細資訊,請參閱UsableDuringInitializationAttribute

ValueSerializerAttribute

參考檔:ValueSerializerAttribute

適用于: 類別、屬性、方法(唯一 get 的 XAML 有效方法案例是支援可附加成員的存取子)。

引數: Type 指定序列化程式在序列化屬性型別的所有屬性或特定屬性時要使用的值序列化程式支援類別。

ValueSerializer 指定值序列化類別,其需要比 更多的 TypeConverter 狀態和內容。 ValueSerializer 您可以將 屬性套用 ValueSerializerAttribute 至可附加成員的靜態 get 存取子方法,以與可附加成員建立關聯。 值序列化也適用于列舉、介面和結構,但不適用於委派。

WhitespaceSignificantCollectionAttribute

參考檔:WhitespaceSignificantCollectionAttribute

適用于: 類別,特別是預期裝載混合內容的集合類型,其中物件元素周圍的空白字元對於 UI 表示而言可能相當重要。

引數: 無。

WhitespaceSignificantCollectionAttribute 表示集合類型應該由 XAML 處理器處理為空白字元,這會影響 XAML 節點資料流程在集合中值節點的建構。 如需詳細資訊,請參閱 XAML 中的空白字元處理。

XamlDeferLoadAttribute

參考檔:XamlDeferLoadAttribute

適用于: 類別、屬性。

引數: 支援兩種屬性形式類型做為字串,或類型為 Type 。 請參閱 XamlDeferLoadAttribute

表示類別或屬性具有 XAML 的延後載入使用方式(例如範本行為),並報告可啟用延遲行為及其目的地/內容類型的類別。

XamlSetMarkupExtensionAttribute

參考檔:XamlSetMarkupExtensionAttribute

適用于: 類別

引數: 為回呼命名。

表示類別可以使用標記延伸來提供一或多個屬性的值,並參考 XAML 寫入器應該呼叫的處理常式,再對類別的任何屬性執行標記延伸集作業。

XamlSetTypeConverterAttribute

參考檔:XamlSetTypeConverterAttribute

適用于: 類別

引數: 為回呼命名。

表示類別可以使用型別轉換器來提供一或多個屬性的值,並參考 XAML 寫入器應該呼叫的處理常式,再對類別的任何屬性執行型別轉換子集作業。

XmlLangPropertyAttribute

參考檔:XmlLangPropertyAttribute

適用于: 類別

引數: 字串,指定要在屬性類型上別名 xml:lang 的屬性名稱。

XmlLangPropertyAttribute 會報告對應至 XML lang 指示詞之屬性型別的屬性。 屬性不一定是型 String 別,但必須可從字串指派(指派可以透過將類型轉換器與屬性的類型或特定屬性產生關聯來完成。 屬性必須是可讀寫的。

對應案例 xml:lang 是讓執行時間物件模型可以存取 XML 指定的語言資訊,而不需使用 XMLDOM 進行特別處理。

定義會繼承至可指派給定義型別的所有衍生型別。 您可以套用 XmlLangPropertyAttribute 至特定衍生型別,以覆寫特定衍生型別上的定義,雖然這種情況並不常見。

下列各節說明未套用至類型或成員定義的 XAML 相關屬性,但會改為套用至元件。 這些屬性與定義在 XAML 中使用的自訂類型程式庫的整體目標有關。 某些屬性不一定直接影響 XAML 節點資料流程,而是在節點資料流程中傳遞,以供其他取用者使用。 資訊的取用者包括需要 XAML 命名空間資訊和相關聯前置詞資訊的設計環境或序列化進程。 XAML 架構內容(包括 .NET XAML 服務預設值)也會使用這項資訊。

XmlnsCompatibleWithAttribute

參考檔:XmlnsCompatibleWithAttribute

引數

  • 字串,指定要子實例之 XAML 命名空間的識別碼。

  • 字串,指定 XAML 命名空間的識別碼,該識別碼可以從上一個引數子化 XAML 命名空間。

    XmlnsCompatibleWithAttribute 指定 XAML 命名空間可由另一個 XAML 命名空間進行子系結。 一般會在預先定義的 XmlnsDefinitionAttribute 中指出建立小計的 XAML 命名空間。 這項技術可用於對程式庫中的 XAML 詞彙進行版本控制,並使它與先前針對舊版詞彙定義的標記相容。

XmlnsDefinitionAttribute

參考檔:XmlnsDefinitionAttribute

引數

  • 字串,指定要定義之 XAML 命名空間的識別碼。

  • 命名 CLR 命名空間的字串。 CLR 命名空間應該在您的元件中定義公用類型,而且至少應該有一個 CLR 命名空間類型用於 XAML。

    XmlnsDefinitionAttribute 會指定 XAML 命名空間與 CLR 命名空間之間的每個元件對應,然後供 XAML 物件寫入器或 XAML 架構內容用來進行型別解析。

    XmlnsDefinitionAttribute多個可以套用至元件。 這可能是因為下列任何原因的組合而完成:

  • 程式庫設計包含多個 CLR 命名空間,用於執行時間 API 存取的邏輯組織;不過,您可以參考相同的 XAML 命名空間,讓這些命名空間中的所有類型都能使用 XAML。 在此情況下,您會使用相同 XmlNamespace 值但不同的 ClrNamespace 值來套用數 XmlnsDefinitionAttribute 個屬性。 如果您要定義架構或應用程式想要成為常見用法中預設 XAML 命名空間的 XAML 命名空間對應,這特別有用。

  • 程式庫設計包含多個 CLR 命名空間,而且您想要在這些 CLR 命名空間中類型使用方式之間刻意的 XAML 命名空間區隔。

  • 您可以在元件中定義 CLR 命名空間,並想要透過多個 XAML 命名空間加以存取。 當您使用相同的程式碼基底支援多個詞彙時,就會發生此案例。

  • 您可以在一或多個 CLR 命名空間中定義 XAML 語言支援。 在此情況下, XmlNamespace 此值應該是 http://schemas.microsoft.com/winfx/2006/xaml

XmlnsPrefixAttribute

參考檔:XmlnsPrefixAttribute

引數

  • 指定 XAML 命名空間識別碼的字串。

  • 指定建議前置詞的字串。

    XmlnsDefinitionAttribute 指定用於 XAML 命名空間的建議前置詞。 在 .NET XAML 服務 XamlXmlWriter 序列化的 XAML 檔案中撰寫元素和屬性,或 XAML 實作程式庫與具有 XAML 編輯功能的設計環境互動時,前置詞很有用。

    XmlnsPrefixAttribute多個可以套用至元件。 這可能是因為下列任何原因的組合而完成:

  • 您的元件會定義多個 XAML 命名空間的類型。 在此情況下,請為每個 XAML 命名空間定義不同的前置詞值。

  • 您支援多個詞彙,而且會針對每個詞彙和 XAML 命名空間使用不同的前置詞。

  • 您可以在元件中定義 XAML 語言支援,並為 定義 XmlnsDefinitionAttributehttp://schemas.microsoft.com/winfx/2006/xaml 在此情況下,您通常應該升級前置詞 x

注意

.NET XAML 服務也會定義 XAML 相關屬性 RootNamespaceAttribute 。 此屬性是專案系統支援的元件層級屬性,與 XAML 自訂類型無關。

另請參閱