XAML 命名空間和命名空間對應
本主題說明大部分 XAML 檔案根元素中找到的 XML/XAML 命名空間 (xmlns) 對應。 它也描述如何為自訂類型和組件產生類似的對應。
XAML 命名空間與程式碼定義和類型程式庫的關聯性
XAML 在一般用途和應用程式 Windows 執行階段應用程式程式設計時,都會使用 XAML 來宣告物件、這些物件的屬性,以及以階層表示的物件屬性關聯性。 您在 XAML 中宣告的物件是由類型程式庫或其他由其他程式設計技術和語言所定義的表示法所支援。 這些程式庫可能是:
- Windows 執行階段的內建物件集。 這是一組固定的物件,並從 XAML 存取這些物件會使用內部類型對應和啟用邏輯。
- 由 Microsoft 或第三方提供之分散式程式庫。
- 代表您的應用程式包含的第三方控制項的定義以及您的套件重新分發的程式庫。
- 您自己的程式庫,這是您專案的一部分,且會保存部分或所有使用者程式碼定義。
備份類型資訊與特定的 XAML 命名空間定義相關聯。 Windows 執行階段之類的 XAML 架構可以匯總多個元件和多個程式碼命名空間,以對應至單一 XAML 命名空間。 這可讓 XAML 詞彙的概念涵蓋較大的程式設計架構或技術。 XAML 詞彙可能相當廣泛,例如,本參考中針對 Windows 執行階段應用程式記載的大部分 XAML 都會構成單一 XAML 詞彙。 XAML 詞彙也是可延伸的:您可以將類型新增至支援程式碼定義,以確保將類型包含在已做為 XAML 詞彙對應命名空間來源的程式碼命名空間中。
XAML 處理器可以在建立執行階段物件表示時,從與該 XAML 命名空間相關聯的備份組件中查閱類型和成員。 這就是為什麼 XAML 做為將物件建構行為正規化和交換定義的一種方式,以及為什麼 XAML 會做為 UWP 應用程式的 UI 定義技術使用。
一般 XAML 標記使用方式中的 XAML 命名空間
XAML 檔案幾乎一律會在其根元素中宣告預設的 XAML 命名空間。 預設的 XAML 命名空間會定義您可以宣告哪些元素,而不需透過前置詞來限定這些項目。 例如,如果您宣告元素 <Balloon />
,XAML 剖析器會預期元素 Balloon 存在,而且在預設 XAML 命名空間中有效。 相反地,如果 Balloon 不在定義的預設 XAML 命名空間中,您必須改為使用前置詞限定該元素名稱,例如 <party:Balloon />
。 前置詞表示元素存在於與預設命名空間不同的 XAML 命名空間中,而且您必須先將 XAML 命名空間對應至前置詞方,才能使用這個元素。 XAML 命名空間會套用至宣告它們的特定元素,以及套用至 XAML 結構中該元素所包含的任何元素。 因此,XAML 命名空間幾乎一律在 XAML 檔案的根元素上宣告,以利用這個繼承。
預設和 XAML 語言 XAML 命名空間宣告
在大部分 XAML 檔案的根元素內,有兩個 xmlns 宣告。 第一個宣告會將 XAML 命名空間對應為預設值:xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
這是數個前置 Microsoft 技術中使用的相同 XAML 命名空間識別碼,這些技術也會使用 XAML 做為 UI 定義標記格式。 使用相同的識別碼是經過深思熟慮的,當您將先前定義的 UI 移轉到使用 C++、C# 或 Visual Basic 的 Windows 執行階段應用程式時,這會很有幫助。
第二個宣告為 XAML 定義的語言元素對應單獨的 XAML 命名空間,將其 (通常)對應到「x:」前置詞:xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
此 xmlns 值以及它所對應的「x:」前置詞也與使用 XAML 的多個先前 Microsoft 技術中使用的定義相同。
這些宣告之間的關係是,XAML 是一種語言定義,而 Windows 執行階段是一種使用 XAML 做為語言並定義在 XAML 中參考其類型的特定詞彙表的實作。
XAML 語言會指定特定語言元素,而且每個元素都應該可透過 XAML 處理器實作來存取,以針對 XAML 命名空間運作。 XAML 語言 XAML 命名空間的「x:」對應慣例後面是專案範本、範例程式碼和語言功能文件。 XAML 語言命名空間會定義數個常用的功能,即使是使用 C++、C# 或 Visual Basic 的基本 Windows 執行階段應用程式也一樣。 例如,若要透過分部類別將任何程式碼隱藏連接到 XAML 檔案,必須將該類別命名為相關 XAML 文件的根元素中的 x:Class 屬性。 或者,XAML 頁面中定義為 ResourceDictionary 和 XAML 資源參考中索引鍵資源的任何元素,都必須在有問題的物件元素上設定 x:Key 屬性。
對應至預設 XAML 命名空間的程式碼命名空間
以下是目前對應至預設 XAML 命名空間的程式代碼命名空間清單。
- Windows.UI
- Windows.UI.Xaml
- Windows.UI.Xaml.Automation
- Windows.UI.Xaml.Automation.Peers
- Windows.UI.Xaml.Automation.Provider
- Windows.UI.Xaml.Automation.Text
- Windows.UI.Xaml.Controls
- Windows.UI.Xaml.Controls.Primitives
- Windows.UI.Xaml.Data
- Windows.UI.Xaml.Documents
- Windows.UI.Xaml.Input
- Windows.UI.Xaml.Interop
- Windows.UI.Xaml.Markup
- Windows.UI.Xaml.Media
- Windows.UI.Xaml.Media.Animation
- Windows.UI.Xaml.Media.Imaging
- Windows.UI.Xaml.Media.Media3D
- Windows.UI.Xaml.Navigation
- Windows.UI.Xaml.Resources
- Windows.UI.Xaml.Shapes
- Windows.UI.Xaml.Threading
- Windows.UI.Text
其他 XAML 命名空間
除了預設命名空間和 XAML 語言 XAML 命名空間「x:」之外,您可能還會在 Microsoft Visual Studio 產生的應用程式的初始預設 XAML 中看到其他已對應的 XAML 命名空間。
d: (http://schemas.microsoft.com/expression/blend/2008
)
「d:」XAML 命名空間旨在用於設計工具支援,特別是 Microsoft Visual Studio 的 XAML 設計介面中的設計工具支援。 「d:」 XAML 命名空間可在 XAML 元素上啟用設計工具或設計階段屬性。 這些設計工具屬性只會影響 XAML 行為的設計層面。 當應用程式執行時,Windows 執行階段 XAML 剖析器載入相同的 XAML 時,會忽略設計工具屬性。 一般而言,設計工具屬性在任何 XAML 元素上都是有效的,但實際上只有某些案例可以自行套用設計工具屬性。 特別是,許多設計工具屬性的目的是為了在開發使用資料繫結的 XAML 和程式碼時,提供與資料內容和資料來互動的更好體驗。
- d:DesignHeight 和 d:DesignWidth 屬性:這些屬性有時會套用到 Visual Studio 或其他 XAML 設計工具介面為您建立的 XAML 檔案的根目錄。 例如,當您將新的 UserControl 新增至應用程式專案時,這些屬性會設定在 XAML 的 UserControl 根目錄上。 這些屬性可讓您更輕鬆地設計 XAML 內容的組成,因此您對於一旦控制項執行個體或較大 UI 頁面的其他部分使用 XAML 內容之後,可能會有一些配置條件約束的預期。
注意:如果您要從 Microsoft Silverlight 移轉 XAML,則代表整個 UI 頁面的根元素上可能會有這些屬性。 在此情況下,您可能會想要移除屬性。 XAML 設計工具的其他功能 (例如模擬器) 對於設計能夠很好地處理縮放和檢視狀態的頁面配置,可能比使用 d:DesignHeight 和 d:DesignWidth 的固定大小頁面配置更有用。
- d:DataContext 屬性:您可以在頁面根目錄或控制項上設定此屬性,以覆寫該物件具有的任何明確或繼承的 DataContext。
- d:DesignSource 屬性:指定 CollectionViewSource 的設計階段資料來源,覆寫 Source。
- d:DesignInstance 和 d:DesignData 標記延伸:這些標記延伸用於為 d:DataContext 或 d:DesignSource 提供設計階段資料資源。 我們不會在此處完整記載如何使用設計階段資料資源。 如需詳細資訊,請參閱設計階段屬性。 有關一些用法範例,請參閱設計圖面上的案例資料和原型設計。
mc: (http://schemas.openxmlformats.org/markup-compatibility/2006
)
「mc:」表示並支援用於讀取 XAML 的標記相容性模式。 通常,「d:」前置詞與屬性 mc:Ignorable 相關聯。 這項技術可讓執行階段 XAML 剖析器忽略「d:」中的設計屬性。
local: 和 common:
「local:」是一個前置詞,通常會在範本化 UWP 應用程式專案的 XAML 頁面中為您對應。 它會對應至所建立的相同命名空間,其中包含所有 XAML 檔案的 x:Class 屬性和程式碼,包括 app.xaml。 只要在同一個命名空間中定義要在 XAML 中使用的任何自訂類別,就可以使用 local: 前置詞來參考 XAML 中的自訂類型。 來自範本化 UWP 應用程式專案的相關前置詞為 common:。 此前置詞是指巢狀的「Common」命名空間,其中包含轉換器和命令等公用程式類別,您可以在方案總管檢視的 Common 資料夾中找到定義。
vsm:
請勿使用。 「vsm:」是一個前置詞,有時會在從其他 Microsoft 技術匯入的舊版 XAML 範本中看到。 命名空間原本已解決舊版命名空間工具問題。 您應該在用於 Windows 執行階段的任何 XAML 中刪除「vsm:」的 XAML 命名空間定義,並變更 VisualState、VisualStateGroup 和相關物件的任何前置詞使用方式,以改用預設的 XAML 命名空間。 如需 XAML 移轉的詳細資訊,請參閱將 Silverlight 或 WPF XAML/程式碼移轉至 Windows 執行階段應用程式。
將自訂類型對應至 XAML 命名空間和前置詞
您可以對應 XAML 命名空間,讓您可以使用 XAML 來存取您自己的自訂類型。 換句話說,您要對應程式碼命名空間,因為它存在於定義自訂類型的程式碼表示法中,並為其指派 XAML 命名空間以及使用前置詞。 XAML 的自訂類型可以在 Microsoft .NET 語言 (C# 或 Microsoft Visual Basic) 或 C++ 中定義。 此對應是藉由定義 xmlns 前置詞來進行。 例如,xmlns:myTypes
定義一個新的 XAML 命名空間,可以透過在所有用法前新增權杖 myTypes:
來存取該命名空間。
xmlns 定義包含值以及前置詞命名。 值是在等號之後進入引號內的字串。 常見的 XML 慣例是將 XML 命名空間與統一資源識別碼 (URI) 產生關聯,以便有唯一性和識別的慣例。 您也會看到預設 XAML 命名空間和 XAML 語言 XAML 命名空間的這個慣例,以及 Windows 執行階段 XAML 所使用的一些較少使用的 XAML 命名空間。 但是,對於對應自訂類型的 XAML 命名空間,而不是指定 URI,您會使用權杖「using:」開始前置詞定義。 在「using:」權杖之後,您可以命名代碼命名空間。
例如,若要對應可讓您參考「CustomClasses」命名空間的「custom1」前置詞,並使用來自該命名空間或組件中的類別做為 XAML 中的物件元素,您的 XAML 頁面應該在根元素中包含下列對應:xmlns:custom1="using:CustomClasses"
不需要對應相同頁面範圍的部分類別。 例如,您不需要前置詞來參考您為處理頁面 XAML UI 定義的事件而定義的事件處理常式。 此外,來自 Visual Studio 的許多起始 XAML 頁面都會使用 C++、C# 或 Visual Basic 為 Windows 執行階段應用程式產生專案,這些前置詞已經對應「local:」前置詞,該前置詞會參考部分類別定義所使用的專案指定預設命名空間和命名空間。
CLR 語言規則
如果您要以 .NET 語言 (C# 或 Microsoft Visual Basic( 撰寫備份程式碼,您可能會使用使用點 (「.」) 做為命名空間名稱一部分的慣例來建立程式碼命名空間的概念階層。 如果您的命名空間定義包含一個點,則點應該是您在「using:」標記之後所指定值的一部分。
如果您的程式碼後置檔案或程式碼定義檔案是 C++ 檔案,某些慣例仍遵循 Common Language Runtime (CLR) 語言格式,因此 XAML 語法沒有任何差異。 如果在 C++ 中宣告巢狀命名空間,則後續巢狀命名空間字串之間的分隔符號應為「.」。當您指定「using:」權杖後面的值時,而不是「::」。
當您定義程式碼以搭配 XAML 使用時,請勿使用巢狀類型 (例如在類別內巢狀列舉)。 無法評估巢狀類型。 XAML 剖析器無法區分點是巢狀類型名稱的一部分,而不是命名空間名稱的一部分。
自訂類型和組件
未在對應中指定定義 XAML 命名空間支援類型的組件名稱。 可用的組件邏輯是在應用程式定義層級控制,而且是基本應用程式部署和安全性原則的一部分。 將您想要包含在 XAML 的程式碼定義來源的任何組件宣告為項目設定中的相依組件。 如需詳細資訊,請參閱在 C++ 和 Visual Basic 中建立 Windows 執行階段元件。
如果您要從主要應用程式的應用程式定義或頁面定義參考自訂類型,這些類型就可供使用,而不需要進一步的相依組件設定,但仍必須對應包含這些類型的程式碼命名空間。 常見的慣例是對應任何指定 XAML 頁面之預設程式碼命名空間的前置詞「local」。 此慣例通常包含在 XAML 專案的起始專案範本中。
附加屬性
如果您要參考附加屬性,附加屬性名稱的擁有者類型部分必須位於預設的 XAML 命名空間中或前面。 很少將屬性與其元素分開加上前置詞,但這是有時需要的屬性,特別是自訂附加屬性的情況。 有關詳細資訊,請參閱自訂附加屬性。