本主題說明 XML/XAML 命名空間(xmlns)對應,可在大多數的 XAML 檔案之根元素中找到。 它也會說明如何為自訂類型和元件產生類似的對應。
XAML 命名空間與程式碼定義和類型程式庫的關聯性
無論是在其一般用途中,還是在 Windows 執行階段應用程式程式設計的應用程式應用程式中,XAML 都可用來宣告物件、這些物件的屬性,以及以階層表示的物件-屬性關聯性。 您在 XAML 中宣告的物件是由類型程式庫或其他程式設計技術和語言所定義的其他表示法所支援。 這些程式庫可能是:
- Windows 執行階段的內建物件集。 這是一組固定的物件,從 XAML 存取這些物件會使用內部類型對應和啟用邏輯。
- 由 Microsoft 或第三方提供的分散式程式庫。
- 您的應用程式中包含的協力廠商控制項定義的程式庫,以及您的套件重新發佈的這些程式庫。
- 您自己的程式庫,這是專案的一部分,並保存部分或全部使用者程式碼定義。
支援類型資訊會與特定的 XAML 命名空間定義相關聯。 XAML 架構 (例如 Windows 執行階段) 可以彙總多個元件和多個程式碼命名空間,以對應至單一 XAML 命名空間。 這可啟用涵蓋大型程式設計架構或技術的 XAML 詞彙概念。 XAML 詞彙可能非常廣泛,例如,本參考中針對 Windows 執行階段應用程式記錄的大部分 XAML 都構成單一 XAML 詞彙。 XAML 詞彙也是可延伸的:您可以藉由將類型新增至支援程式碼定義來擴充它,並確定在已用作 XAML 詞彙的對應命名空間來源的程式碼命名空間中包含類型。
XAML 處理器在建立執行階段物件表示法時,可以從與該 XAML 命名空間相關聯的支援元件中查閱類型和成員。 這就是為什麼 XAML 很有用,可以正式化和交換物件建構行為的定義,以及 XAML 做為 Windows 執行階段應用程式的 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 定義標記格式。 使用相同的識別碼是刻意的,當您使用 C++、C# 或 Visual Basic 將先前定義的 UI 移轉至 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 語言命名空間會定義數個常用的功能,即使是基本的 Windows 執行階段應用程式也必須使用這些功能。 例如,若要透過部分類別將任何程式碼後置聯結至 XAML 檔案,您必須將該類別命名為相關 XAML 檔案根元素中的 x:Class 屬性 。 或者,在 XAML 頁面中定義的任何元素作為 ResourceDictionary 和 XAML 資源參考 的索引鍵資源時,必須在相關的物件元素上設定 x:Key 屬性。
對應至預設 XAML 命名空間的程式碼命名空間
以下是目前對應至預設 XAML 命名空間的程式碼命名空間清單。
- Windows.UI
- Windows.UI.Xaml
- Windows.UI.Xaml.自動化
- 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.標記
- 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.資源
- Windows.UI.Xaml.圖形
- Windows.UI.Xaml.執行緒處理
- 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 檔案根目錄。 例如,這些屬性會在 XAML 的 UserControl 根目錄上設定,如果您將新的 UserControl 新增至應用程式專案,就會建立該根目錄。 這些屬性可讓您更輕鬆地設計 XAML 內容的組合,讓您對 XAML 內容用於控制項執行個體或較大 UI 頁面的其他部分後可能存在的版面配置條件約束有所預期。
便條 如果您要從 Microsoft Silverlight 移轉 XAML,則在代表整個 UI 頁面的根元素上可能有這些屬性。 在此情況下,您可能想要移除屬性。 XAML 設計工具的其他功能 (例如模擬器) 可能比使用 d:DesignHeight 和 d:DesignWidth 的固定大小頁面配置更適合設計處理縮放和檢視狀態的頁面配置。
d:DataContext屬性: 您可以在頁面根元素或控制項上設定此屬性,以覆寫物件所具有的任何明確或繼承的DataContext。
d:DesignSource屬性: 指定 CollectionViewSource 的設計階段資料來源,覆寫 來源。
d:DesignInstance 和 d:DesignData 標記延伸: 這些標記延伸模組可用來提供 d:DataContext 或 d:DesignSource 的設計階段資料資源。 我們不會在這裡完整記錄如何使用設計階段資料資源。 如需詳細資訊,請參閱 Design-Time 屬性。 如需一些使用範例,請參閱 設計介面上的範例資料,以及原型設計。
司儀:(http://schemas.openxmlformats.org/markup-compatibility/2006)
“ mc:” 表示並支援讀取 XAML 的標記相容模式。 一般而言,「d:」前置詞會與屬性 mc:Ignorable 相關聯。 此技術可讓執行階段 XAML 剖析器忽略 “d:” 中的設計屬性。
local: 和 common:
"local:" 是為範本化的 UWP 應用專案的 XAML 頁面中通常為您映射的前綴。 它被映射為參考同一個用於包含 x:Class 屬性 和所有 XAML 檔案(包括 app.xaml)程式碼的命名空間。 只要您定義要在相同命名空間中的 XAML 中使用的任何自訂類別,您就可以使用 local: 前置詞來參考 XAML 中的自訂類型。 來自範本化 UWP 應用程式專案的相關前置詞是 常見的:。 此前置詞是指巢狀的「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 產生的 Windows 執行階段應用程式專案的起始 XAML 頁面已經對應 “local:” 前置詞,該前置詞會參考專案指定的預設命名空間,以及部分類別定義所使用的命名空間。
CLR 語言規則
如果您要以 .NET 語言 (C# 或 Microsoft Visual Basic) 撰寫支援程式碼,您可能會使用使用點 (“.”) 作為命名空間名稱一部分的慣例,來建立程式碼命名空間的概念階層。 如果您的命名空間定義包含點,則該點應該是您在「using:」權杖之後指定的值的一部分。
如果您的程式碼後置檔案或程式碼定義檔案是 C++ 檔案,則某些慣例仍會遵循一般語言執行階段 (CLR) 語言形式,因此 XAML 語法沒有差異。 如果您在 C++ 中宣告巢狀命名空間,當您指定 “using:” 權杖後面的值時,連續巢狀命名空間字串之間的分隔符號應該是 “.” 而不是 “::”。
當您定義程式碼以與 XAML 搭配使用時,請勿使用巢狀類型 (例如在類別內巢狀列舉)。 無法評估巢狀類型。 XAML 剖析器無法辨別一個點是屬於巢狀類型名稱的一部分,還是命名空間名稱的一部分。
自訂類型和組件
定義 XAML 命名空間支援類型的元件名稱未在對應中指定。 元件是否可用的邏輯是在應用程式定義層級進行控制,並且是基本的應用程式部署和安全性原則的一部分。 在專案設定中,將您希望納入為 XAML 程式碼定義來源的元件聲明為相依元件。 如需詳細資訊,請參閱 在 C# 和 Visual Basic 中建立 Windows 執行階段元件。
如果您從主要應用程式的應用程式定義或頁面定義參考自訂類型,則這些類型無需進一步相依元件組態即可使用,但您仍然必須對應包含這些類型的程式碼命名空間。 常見的慣例是將前置詞 “local” 對應到任何指定 XAML 頁面的預設程式碼命名空間。 此慣例通常包含在 XAML 專案的啟動專案範本中。
附加屬性
如果您要參考附加屬性,附加屬性名稱的擁有者類型部分必須位於預設 XAML 命名空間中,或有前置詞。 通常不會將屬性獨立於其元素前置設定,但這是某些情況下需要這麼做,特別是針對自訂附加屬性。 如需詳細資訊,請參閱 自訂附加屬性。