Поделиться через


Пространства имен XAML и сопоставление пространств имен

Обновлен: Ноябрь 2007

В этом разделе объясняется наличие и цели сопоставления двух пространств имен XML, указанных в корневом теге каждого файла Язык XAML (Extensible Application Markup Language). Также дается описание способов создания аналогичных сопоставлений для использования элементов, заданных в коде и/или в отдельных сборках.

В этом разделе содержатся следующие подразделы.

  • WPF и объявления пространства имен XAML
  • Сопоставление пользовательских классов и сборок
  • Сопоставление пространств имен CLR с пространствами имен XML в сборке
  • Связанные разделы

WPF и объявления пространства имен XAML

При объявлении пространств имен в корневом теге нескольких файлов Язык XAML (Extensible Application Markup Language) можно видеть, что существует два объявления пространства имен XML. Первое объявление сопоставляет общее пространство имен Windows Presentation Foundation (WPF) по умолчанию:

xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"

Второе объявление сопоставляет отдельное пространство имен Язык XAML (Extensible Application Markup Language), сопоставляя его (обычно) с префиксом x:.

xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"

Связь между этими объявлениями является фактически определением языка XAML, и WPF — одна из реализаций, которая использует XAML в качестве языка. Язык XAML определяет некоторые элементы языка, которые предполагаются реализованными в порядке совместимости, и каждый из них должен быть доступен через реализации процессора XAML, работающего в пространстве имен XAML. Реализация WPF и предназначенные для нее модели программирования обычно используют пространство имен XML для своих API-интерфейсы, и отдельно сопоставленные префиксы для синтаксиса разметки, ожидаемого в XAML. По соглашению, этим префиксом является x:, и это же соглашение x: сопровождается шаблонами проектов, образцом кода и документацией по функциональным особенностям языка в Пакет SDK. Пространство имен XAML определяет многие часто используемые функциональные возможности, которые необходимы даже для основных приложений WPF. Например, чтобы присоединить какой-либо код к файлу XAML через разделяемый класс, необходимо именовать класс как атрибут x:Class в корневом элементе соответствующего файла XAML. Или же любой элемент, определенный на странице XAML, к которой необходимо получить доступ в качестве ключевого ресурса, должен иметь набор атрибутов x:Key элемента в вопросе. Дополнительные сведения об этих и других аспектах XAML см. в разделах Общие сведения о XAML и Терминология синтаксиса XAML.

Сопоставление пользовательских классов и сборок

Можно сопоставить пространства имен XML со сборками, используя серии маркеров в объявлениях префиксов xmlns, аналогично тому, как стандартные пространства имен WPF и XAML сопоставляются с префиксами.

Синтаксис допускает следующие возможные именованные маркеры и следующие значения:

clr-namespace: Пространство имен среда CLR (common language runtime) объявлено внутри сборки, которая содержит открытые типы, предоставленные как элементы.

assembly= Сборка, которая содержит некоторые или все указанные пространства имен CLR. Обычно это только имени сборки, но не пути. Путь к этой сборке должен быть установлен в качестве ссылки проекта в файле проекта, который создает скомпилированный XAML. Дополнительно, чтобы включить отслеживание версий и подписи строгого имени, значение может быть строкой, которая определяется AssemblyName.

Обратите внимание, что маркер clr-namespace отделяется от его значения двоеточием (:), тогда как маркер assembly отделяется от значения знаком равенства (=). Эти два маркера разделяются точкой с запятой. Также не включайте пробел где-либо в объявлении. Например:

xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary"

Сопоставление с текущими сборками

Можно опустить assembly, если указанное пространство имен clr-namespace, определенное в этой сборке в качестве кода приложения, ссылается на пользовательские классы. Или аналогичный способ для этого случая ― указание assembly= с нестроковым маркером после знака равенства.

Пользовательские классы нельзя использовать в качестве корневого элемента страницы, если они определены в той же сборке. Разделяемые классы не требуют сопоставления; должны быть сопоставлены только классы, которые не являются разделяемыми классами страницы в приложении, если планируется ссылка на них как на элементы в XAML.

Сопоставление пространств имен CLR с пространствами имен XML в сборке

WPF определяет атрибут CLR, который обрабатывается процессорами XAML по порядку для сопоставления нескольких пространств имен CLR с одним пространством имен XML. Этот атрибут XmlnsDefinitionAttribute помещается на уровне сборки в исходном коде, который создает сборку. Исходный код сборки WPF использует этот атрибут для сопоставления различных общих пространств имен, например, System.Windows и System.Windows.Controls с пространством имен https://schemas.microsoft.com/WinFX/2006/XAML/Presentation.

XmlnsDefinitionAttribute имеет два параметра: пространство имен XML и пространство имен CLR. Может существовать несколько XmlnsDefinitionAttribute для сопоставления нескольких пространств имен CLR с одним пространством имен XML. После сопоставления на члены этих пространств имен при желании можно ссылаться без указания полного имени, предоставляя соответствующую инструкцию using на странице программного кода разделяемого класса. Дополнительные сведения см. в разделе XmlnsDefinitionAttribute.

См. также

Основные понятия

Общие сведения о XAML

Другие ресурсы

Общее представление о пространствах имен XML