當前位置:成語大全網 - 新華字典 - 如何在代碼中操作xaml中的元素

如何在代碼中操作xaml中的元素

XAML 根元素和 xmlns

壹個 XAML 文件只能有壹個根元素,這樣才能成為格式正確的 XML 文件和有效的 XAML 文件。通常,應選擇屬於應用程序模型壹部分的元素(例如,為頁面選擇 Window 或 Page,為外部字典選擇 ResourceDictionary,或為應用程序定義根選擇 Application)。下面的示例演示 WPF 頁面的典型 XAML 文件的根元素,其中的根元素為 Page。

根元素還包含屬性 xmlns 和 xmlns:x。這些屬性向 XAML 處理器指明哪些命名空間包含標記將要引用的元素的元素定義。xmlns 屬性專門指示默認的 xmlns 命名空間。在默認的 xmlns 命名空間中,可以不使用前綴指定標記中的對象元素。對於大多數 WPF 應用程序方案以及 SDK 的 WPF 部分中給出的幾乎所有示例,默認的 xmlns 命名空間均映射為 WPF 命名空間 /winfx/2006/xaml/presentation。xmlns:x 屬性指示另外壹個 xmlns 命名空間,該命名空間映射 XAML 語言命名空間 /winfx/2006/xaml。在具有此映射的文件的標記中引用時,XAML 規範定義的必需語言組件帶有 x: 前綴。使用 xmlns 定義用法範圍和映射的這種做法符合 XML 1.0 規範。請註意,xmlns 屬性僅在每頁的根元素上和應用程序定義上(如果在標記中提供了應用程序定義)才是嚴格必需的。xmlns 定義將應用於根的所有子元素。(此行為仍然符合 xmlns 的 XML 1.0 規範。)xmlns 屬性還允許出現在根下面的其他元素上,並且將應用於定義元素的任何子元素。但是,此用法並不典型,因為頻繁定義或重新定義 xmlns 命名空間可能會導致 XAML 標記樣式難以閱讀。

由於存在屬於項目生成文件壹部分的配置,因此可以知道 WPF 程序集包含的某些類型支持 WPF 到默認 xmlns 的映射。程序集還映射到目標文件中。因此,為了引用來自 WPF 程序集的 XAML 元素,只需映射 xmlns 即可。對於您自己的自定義程序集,或者除 WPF 之外的程序集,可以將該程序集指定為 xmlns 映射的壹部分。通常,可選擇其他前綴,但是也可以選擇其他 xmlns 作為默認值,然後將 WPF 映射到前綴。

x: 前綴

在前面的根元素示例中,前綴 x: 用於映射 XAML xmlns /winfx/2006/xaml。在此 SDK 的項目模板、示例以及文檔中,此 x: 前綴將用於映射 XAML xmlns。x: 前綴/XAML xmlns 包含多個將在 XAML 中頻繁用到的編程構造。下面列出了將用到的最常見 x: 前綴/XAML xmlns 編程構造:

x:Key:為 ResourceDictionary 中的每個資源設置壹個唯壹的鍵。在應用程序標記中看到的所有 x: 用法中,x:Key 可能占到 90%。

x:Class:向為 XAML 頁提供代碼隱藏的類指定 CLR 命名空間和類名。必須具有這樣壹個類才能支持代碼隱藏,也正是由於這個原因,即使沒有資源,您也幾乎總是會看到映射的 x:。

x:Name:處理對象元素後,為運行時代碼中存在的實例指定運行時對象名稱。在不支持等效的 WPF 框架級Name 屬性的情況下命名元素時,可以使用 x:Name。某些動畫方案中會發生這種情況。

x:Static:啟用壹個獲取靜態值的值引用,該靜態值只能是壹個 XAML 可設置屬性。

x:Type:根據類型名稱構造壹個 Type 引用。它用於指定采用 Type 的屬性 (Attribute),如 Style..::.TargetType,不過在許多情況下屬性 (Property) 本身具有字符串到 Type 的轉換功能,因此使用 x:Type 是可選的。

x: 前綴/XAML xmlns 中還有其他壹些不太常見的編程構造。

事件和 XAML 代碼隱藏

大多數 WPF 應用程序都是既包括標記,又包括代碼隱藏。在壹個項目中,XAML 被編寫為 .xaml 文件,而使用 CLR 語言(如 Microsoft Visual Basic .NET 或 C#)編寫代碼隱藏文件。編譯 XAML 文件時,每個 XAML 頁的 XAML 代碼隱藏文件的位置是通過指定壹個命名空間和類作為 XAML 頁的根元素的 x:Class 屬性來確定的。

在目前已介紹的示例中,您已看到幾個按鈕,但還沒有壹個按鈕具有任何關聯的邏輯行為。為對象元素添加行為的主要應用程序級機制是使用元素類的現有事件,並為在運行時引發該事件時調用的該事件編寫特定的處理程序。事件名稱以及要使用的處理程序的名稱在標記中指定,而實現處理程序的代碼在代碼隱藏中定義。