Корневой элемент XAML-документа WPF (такой как , , или ) почти всегда будет ссылаться на два заранее определенные пространства имен XML:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
Первое пространство имен XML, http://schemas.microsoft.com/winfx/2006/xaml/presentation, отображает множество связанных c WPF пространств имен .NET для использования текущим файлом *.xaml (System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Ink, System.Windows.Media, System.Windows.Navigation и т.д.).
Это отображение "один ко многим" в действительности жестко закодировано внутри сборок WPF (WindowsBase.dll, PresentationCore.dll и PresentationFramework.dll) с применением атрибута [XmlnsDefinition] уровня сборки. Например, если открыть браузер объектов Visual Studio и выбрать сборку PresentationCore.dll, то можно увидеть списки, подобные показанному ниже, в котором импортируется пространство имен System.Windows:
[assembly: XmlnsDefinition(
"http://schemas.microsoft.com/winfx/2006/xaml/presentation",
"System.Windows")]
Второе пространство имен XML, http://schemas.microsoft.com/winfx/2006/xaml, используется для добавления специфичных для XAML "ключевых слов" (термин выбран за неимением лучшего), а также пространства имен System.Windows.Markup:
[assembly: XmlnsDefinition(
"http://schemas.microsoft.com/winfx/2006/xaml",
"System.Windows.Markup")]
Одно из правил любого корректно сформированного документа XML (не забывайте, что грамматика XAML основана на XML) состоит в том, что открывающий корневой элемент назначает одно пространство имен XML в качестве х, однако он может быть любым уникальным маркером, таким как XamlSpecificStuff:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:XamlSpecificStuff="http://schemas.microsoft.com/winfx/2006/xaml">
Очевидный недостаток определения длинных префиксов для пространств имен XML связан с тем, что XamlSpecificStuff придется набирать всякий раз, когда в файле XAML нужно сослаться на один из элементов, определенных в этом пространстве имен XML. Из-за того, что префикс XamlSpecificStuff намного длиннее, давайте ограничимся х.
Помимо ключевых слов x:Name, х:Class и x:Code пространство имен http://schemas.microsoft.com/winfх/2006/xaml также предоставляет доступ к дополнительным ключевым словам XAML, наиболее распространенные из которых кратко описаны в табл. 24.9.
В дополнение к двум указанным объявлениям пространств имен XML можно (а иногда и нужно) определить дополнительные префиксы дескрипторов в открывающем элементе документа XAML. Обычно так поступают, когда необходимо описать в XAML класс .NET Core, определенный во внешней сборке.
Например, предположим, что было построено несколько специальных элементов управления WPF, которые упакованы в библиотеку по имени MyControls.dll. Если теперь требуется создать новый объект Window, в котором применяются созданные элементы, то можно установить специальное пространство имен XML, отображаемое на библиотеку MyControls.dll, с использованием маркеров clr-namespace и assembly. Ниже приведен пример разметки, создающей префикс дескриптора по имени myCtrls, который может применяться для доступа к элементам управления в этой библиотеке:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"