xaml 名稱範圍儲存 xaml 定義的物件名稱和它們的對等例項之間的關係。此概念類似於其他程式語言和技術中的術語名稱範圍的更廣泛的含義。
xaml 名稱範圍中的名稱使使用者**能夠引用最初在 xaml 中宣告的物件。分析 xaml 的內部結果是,執行時建立一組物件,保留這些物件在 xaml 宣告中擁有的部分或所有關係。這些關係作為所建立物件的特定物件屬性來維護,或者向程式設計模型 api 中的實用工具方法公開。
對於 xaml 名稱範圍中的名稱,其最典型的用途是作為物件例項的直接引用,由標記編譯過程以一種專案生成操作的形式,結合分部類模板中生成的initializecomponent方法來實現。
返回物件的引用,該物件使用 xaml 標記中的名稱定義。
返回值。 要自行檢視此基礎結構,可以在編譯後檢視 windows 執行時應用專案的 /obj 子資料夾中為每個 xaml 頁面建立的「.g」(生成的)檔案。如果反射你最終的程式集或檢查它們的介面語言內容,也可以看到欄位和initializecomponent方法是這些結果程式集的成員。。)。
建立的新物件樹所定義的初步 xaml 名稱範圍會在所提供的 xaml 中計算任何已定義的名稱,以確定其是否唯一。如果所提供的 xaml 中的名稱此時在內部不是唯一的,xamlreader.load會丟擲乙個異常。如果或當斷開的物件樹連線到主要應用程式物件樹時,它不會嘗試將它的 xaml 名稱範圍與主要應用程式 xaml 名稱範圍合併。連線樹後,你的應用有乙個統一的物件樹,但該樹中具有離散 xaml 名稱範圍。這種分歧發生在物件之間的連線點上,你在這些連線點將乙個屬性設定為從乙個xamlreader.load呼叫返回的值。
方法以及直接管理的物件引用不再針對乙個統一的 xaml 名稱範圍來執行。相反,在其上呼叫findname的特定物件將指定範圍,該範圍就是呼叫物件所在的 xaml 名稱範圍。在直接管理的物件引用情況中,該範圍由**所在的類指定。通常,用於乙個應用內容「頁面」的執行時互動的**隱藏位於支援根「頁面」的分部類中,因此 xaml 名稱範圍是根 xaml 名稱範圍。
建立的離散 xaml 名稱範圍的物件。相反,如果呼叫的findname來自從該離散 xaml 名稱範圍獲得的物件,該方法不會找到根 xaml 名稱範圍中的命名物件。
呼叫時按 xaml 名稱範圍中的名稱查詢物件的操作。
要獲得在不同 xaml 名稱範圍中定義的物件的引用,你可以使用多種技術:
返回的集合)在離散的步驟中遍歷整個樹。
。 的有效物件。你可以保持此物件用作全域性變數,或者使用方法引數傳遞它。
api 支援單獨基於位置和索引,遍歷可視樹以查詢父物件和子集合。
xaml 中的模板提供了以一種直觀方式重用和重新應用內容的能力,但模板可能還包含各種元素,這些元素具有在模板級別定義的名稱。該名稱模板可在乙個頁面中多次使用。出於此原因,模板定義它們自己的 xaml 名稱範圍,不依賴於樣式或模板所應用到的包含頁面。 考慮此示例:
<page
xmlns
=""xmlns:x
="">
<
page.resources
>
<
controltemplate
x:key
="mytemplate"
>
....
<
textblock
x:name
="mytextblock"
/>
controltemplate
>
page.resources
>
<
stackpanel
>
<
somecontrol
template=""
/>
<
somecontrol
template=""
/>
stackpanel
>
page
>
此處同乙個模板被應用於兩個不同的控制項。如果模板沒有離散 xaml 名稱範圍,模板中使用的 "mytextblock" 名稱將導致名稱衝突。模板的每次例項化都擁有自己的 xaml 名稱範圍,所以在本例中,每個已例項化模板的 xaml 名稱範圍將僅包含乙個名稱。但是,根 xaml 名稱範圍不包含來自每個模板的名稱。
。 如果你是一位控制項作者並且正在生成一種約定,其中已應用的模板中乙個特定的命名元素是控制項本身所定義的一種行為的目標,你可以使用你的控制項實現**中的gettemplatechild方法。gettemplatechild方法是受保護的,所以只有控制項作者能訪問它。另外,控制項作者應該遵守一些約定來命名各部分和為各部分建立模板,並以應用到控制項類的屬性值的形式報告這些部分。此技術使重要部分的名稱可供那些可能希望應用不同模板的控制項使用者發現,這將需要替換已命名的部分才能維護控制項功能。
XAML標記擴充套件
標記擴充套件是一種用於獲取既不是基元也不是特定xaml型別的值得xaml方法。對於特性用法,標記擴充套件使用已知的左大括號 常見標記擴充套件有 binding xaml載入時,將資料繫結到xaml物件 staticresource 引用資料字典中定義的靜態資源 relativesource 對特定資...
XAML標記擴充套件
標記擴充套件是乙個 xaml 語言概念。indicate a markup extension usage.當用於提供特性語法的值時,大括號 表示標記擴充套件用法。此用法指示 xaml 處理系統不要像通常那樣將特性值視為乙個文字字串或者可轉換為字串的值。used for data binding e...
XAML開發入門之建立XAML應用程式
現在通過乙個完整的步驟來建立並生成上述的wpf程式,以便你可以快速地進入學習xaml的歷程。3 現在我們要使用msbuild將這些檔案生成乙個wpf程式,為此,我們可以通過 開始 所有程式 microsoft windows sdk cmd 開啟msbuild控制台視窗,預設狀態我們所處目錄是win...