Корневой элемент 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"