XAML 命名空間和命名空間對映

2022-02-27 02:15:25 字數 3958 閱讀 8552

本主題將介紹大部分 xaml 檔案的根元素中存在的 xml/xaml 命名空間 (xmlns) 對映。它還將介紹如何為自定義型別和程式集生成類似的對映。

無論是其一般用途還是 windows 執行時應用程式設計的應用上,xaml 都用於宣告物件、這些物件的屬性以及表示為層次結構的物件-屬性關係。你在 xaml 中宣告的物件受其他程式設計技術和語言定義的型別庫或其他表示支援。這些庫可能是:

支援型別資訊與特定 xaml 命名空間定義相關聯。xaml 框架(如 windows 執行時)可聚合多個程式集和多個**命名空間,以對映到單個 xaml 命名空間。這就支援涉及更大的程式設計框架或技術的 xaml 詞彙表概念。xaml 詞彙表可能非常大—例如該引用中為 windows 執行時應用記錄的大部分 xaml 構成單個 xaml 詞彙表。xaml 詞彙表也可擴充套件:通過向支援**定義新增型別來擴充套件它,從而確保在**命名空間(已經用作 xaml 詞彙表的對映的命名空間**)中包含這些型別。

xaml 處理器在建立執行時物件表示時,可查詢與該 xaml 命名空間關聯的支援程式集的型別和成員。出於此原因,xaml 可用作一種形式化和交換物件構造定義行為的方式,並且 xaml 可用作 windows 應用商店應用的 ui 定義技術。

xaml 檔案幾乎總是在其根元素中宣告乙個預設 xaml 命名空間。預設 xaml 命名空間定義了無需使用字首來限定即可宣告哪些元素。例如,如果宣告乙個元素,xaml 分析器期望乙個balloon元素存在並且在預設的 xaml 命名空間中是有效的。相反,如果balloon不在已定義的預設 xaml 命名空間中,就必須使用乙個字首限定該元素名稱,例如。該字首表明該元素存在於與預設命名空間不同的 xaml 命名空間中,你必須將乙個 xaml 命名空間對映到字首party,然後才能使用此元素。 xaml 命名空間適用於在其上宣告它們的特定元素,也適用於該元素在 xaml 結構中包含的任何元素。出於此原因,xaml 命名空間幾乎總是在 xaml 檔案的根元素上宣告,以充分利用這種繼承性。

在大多數 xaml 檔案的根元素中,有兩個xmlns宣告。第乙個宣告將乙個 xaml 命名空間對映為預設命名空間:xmlns=""

這是多個也使用 xaml 作為 ui 定義標記格式的預處理器 microsoft 技術中使用的相同 xaml 命名空間識別符號。使用相同的識別符號是經過深思熟慮的,在將以前定義的 ui 遷移到使用 c++、c# 或 visual basic 的 windows 執行時應用時很有用。

第二個宣告對映 xaml 定義的語言元素的乙個獨立的 xaml 命名空間,(通常)將它對映到 "x:" 字首:xmlns:x=""

xmlns值和它所對映到的 "x:" 字首對於在多個使用 xaml 的前置任務 microsoft 技術中使用的定義也是相同的。

這些宣告之間的關係是,xaml 是一種語言定義,windows 執行時是一種實現,它使用 xaml 作為語言並定義乙個特定的詞彙表,它的型別在這裡供 xaml 引用。

除了預設命名空間和 xaml 語言 xaml 命名空間 "x:",你也可能在 microsoft visual studio 生成的應用的初始預設 xaml 中看到其他的已對映 xaml 命名空間。

"d:" xaml 命名空間旨在提供設計器支援,尤其是 microsoft visual studio 的 xaml 設計介面中的設計器支援。" d:" xaml 命名空間支援 xaml 元素上的設計器或設計時特性。這些設計器特性只影響 xaml 行為的設計方面。如果 windows 執行時 xaml 分析器在乙個應用執行時載入相同的 xaml,設計器特性會被忽略。一般而言,設計器特性在任何 xaml 元素上是有效的,但在實際情況中,只有某些場景適合應用設計器特性。具體來講,許多設計器特性是為了在你開發使用資料繫結的 xaml 和**時,提供一種與資料上下文和資料來源互動的更好體驗。

,則這些屬性是針對所建立的 xaml 的usercontrol根設定的。這些屬性更便於設計 xaml 內容組合,以便在將該 xaml 內容用於控制項示例或更大 ui 頁面的其他部分之後,你能夠**可能存在的布局約束。

注意如果要從 microsoft silverlight 遷移 xaml,代表整個 ui 頁面的根元素上可能存在下列特性。在這種情況下,你可能希望刪除這些特性。與使用d:designheightd:designwidth的固定大小頁面布局相比,xaml 設計器的其他功能(如模擬器)對於設計能夠很好地處理縮放和檢視狀態的頁面布局或許更有用。。。

" mc:" 表示並支援讀取 xaml 的標記相容性模式。通常,"d:" 字首與特性mc:ignorable相關聯。此技術使執行時 xaml 分析器忽略 "d:" 中的設計特性。

你可以對映乙個 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 命名空間中看到此約定。對於對映自定義型別(而不是指定乙個 uri)的 xaml 命名空間,你可以為定義新增令牌 "using:" 作為字首。在 "using:" 令牌後,可命名**命名空間。

例如,要對映乙個允許你引用 "customclasses" 命名空間的 "custom1" 字首,並使用來自該命名空間或程式集的類作為 xaml 中的字首,你的 xaml 頁面應在根元素上包含以下對映:xmlns:custom1="using:customclasses"

不需要對映同一頁面範圍中的分部類。例如,不需要字首即可引用你為處理來自頁面的 xaml ui 定義的事件而定義的任何事件處理程式。另外,visual studio 生成的使用 c++、c# 或 visual basic 的 windows 執行時應用專案的許多起始 xaml 頁面已對映 "local:" 字首,它引用專案指定的預設命名空間和分部類定義所使用的命名空間。

如果使用 .net 語言(c# 或 microsoft visual basic)編寫支援**,你可能會在命名空間名稱中使用乙個點 (".") 的約定,以建立**命名空間的概念性層次結構。如果命名空間定義包含乙個點,則這個點應該是你在 "using:" 令牌之後指定的值的一部分。

如果**隱藏檔案或**定義檔案是 c++ 檔案,那麼某些約定仍然遵守公共語言執行時 (clr) 語言形式,因此在 xaml 語法上沒有區別。如果在 c++ 中宣告巢狀的命名空間,則在指定 "using:" 令牌後的值時,連續的巢狀命名空間字串之間的分隔符也應是乙個 ".",而不是 "::"。

當你定義**以供使用 xaml 時,請勿使用巢狀型別(例如在某個類中巢狀列舉)。無法評估巢狀型別。xaml 分析器無法區分某個點是巢狀型別名稱的一部分,而不是命名空間名稱的一部分。

如果從主要應用的應用程式定義或頁面定義中引用自定義型別,這些型別無需進一步的依賴程式集配置即可使用,但你仍然必須對映包含這些型別的**命名空間。一種常見的約定是對映任何給定 xaml 頁面的預設**命名空間的字首 "local"。此約定常常包含在 xaml 專案的初始專案模板中。

WPF中XAML命名空間對映

本主題進一步解釋每個可擴充套件應用程式標記語言 xaml 檔案的根標記中存在的兩個命名空間對映及其用途,同時還介紹如何生成類似的對映,以便使用在您自己的 中和 或單獨的程式集中定義的元素。wpf 和 xaml 命名空間宣告 在許多可擴充套件應用程式標記語言 xaml 檔案的根標記中的命名空間宣告內,...

XAML概要 XAML的根元素和命名空間

xmlns x 上例中的根元素中包含兩個屬性 xmlns和xmlns x。這兩個屬性給xaml處理器指明了標籤中引用的元素是在哪個xml命名空間中定義的。特別是xmlns屬性,它指明了預設的xml命名空間,在預設的xml命名空間中,物件元素可以不使用字首來指定,對於大多數的wpf應用案例,以及在sd...

C 命名空間 預設命名空間與匿名命名空間

2.匿名命名空間 預設命名空間也叫全域性命名空間,所有沒有置於某一具體命名空間下的 即在預設命名空間下,例如func main 函式。include void func void intmain int argc,char ar void func void 需要注意的是 這個就是類似於c語言裡簡單...