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

В этом разделе описываются сопоставления пространства имен XML/XAML (xmlns), как показано в корневом элементе большинства ФАЙЛОВ XAML. В нем также описывается создание аналогичных сопоставлений для пользовательских типов и сборок.

Связь пространств имен XAML с библиотеками определений кода и типов

Как в общем назначении, так и для своего приложения для среда выполнения Windows программирования приложений XAML используется для объявления объектов, свойств этих объектов и связей свойств объектов, выраженных как иерархии. Объекты, объявленные в XAML, поддерживаются библиотеками типов или другими представлениями, определенными другими методами программирования и языками. Эти библиотеки могут быть следующими:

  • Встроенный набор объектов для среда выполнения Windows. Это фиксированный набор объектов и доступ к этим объектам из XAML использует внутреннюю логику сопоставления типов и активации.
  • Распределенные библиотеки, предоставляемые корпорацией Майкрософт или сторонними лицами.
  • Библиотеки, представляющие определение стороннего элемента управления, включаемого приложением, и распространяемых пакетов.
  • Ваша собственная библиотека, которая входит в проект и содержит некоторые или все определения пользовательского кода.

Сведения о резервном типе связаны с определенными определениями пространства имен XAML. Платформы XAML, такие как среда выполнения Windows, могут объединять несколько сборок и несколько пространств имен кода для сопоставления с одним пространством имен XAML. Это позволяет использовать концепцию словаря XAML, охватывающего большую платформу программирования или технологию. Словарь XAML может быть довольно обширным, например, большинство XAML, задокументированных для приложений среда выполнения Windows в этой ссылке, представляет собой один словарь XAML. Словарь XAML также расширяем: вы расширяете его, добавляя типы в определения резервного кода, обязательно добавляя типы в пространства имен кода, которые уже используются в качестве сопоставленных источников пространства имен для словаря XAML.

Обработчик XAML может искать типы и элементы из резервных сборок, связанных с этим пространством имен XAML при создании представления объекта во время выполнения. Именно поэтому XAML полезен в качестве способа формализации и обмена определениями поведения создания объектов и почему XAML используется в качестве метода определения пользовательского интерфейса для приложения UWP.

Пространства имен XAML в типичном использовании разметки XAML

XAML-файл почти всегда объявляет пространство имен XAML по умолчанию в корневом элементе. Пространство имен XAML по умолчанию определяет, какие элементы можно объявить без их определения префиксом. Например, если вы объявляете элемент, средство синтаксического анализа XAML ожидает, что элемент <Balloon />Balloon существует и действителен в пространстве имен XAML по умолчанию. В отличие от этого, если воздушный шар не находится в определенном пространстве имен XAML по умолчанию, вместо этого необходимо указать это имя элемента с префиксом, например <party:Balloon />. Префикс указывает, что элемент существует в другом пространстве имен XAML, отличном от пространства имен по умолчанию, и необходимо сопоставить пространство имен XAML с стороной префикса, прежде чем использовать этот элемент. Пространства имен XAML применяются к конкретному элементу, на котором они объявлены, а также к любому элементу, содержаемому этим элементом в структуре XAML. По этой причине пространства имен XAML почти всегда объявляются на корневых элементах XAML-файла, чтобы воспользоваться этим наследованием.

Объявления пространства имен XAML по умолчанию и языка XAML

В корневом элементе большинства ФАЙЛОВ XAML есть два объявления xmlns . Первое объявление сопоставляет пространство имен XAML как значение по умолчанию: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

Это тот же идентификатор пространства имен XAML, используемый в нескольких предыдущих технологиях Майкрософт, которые также используют XAML в качестве формата разметки определения пользовательского интерфейса. Использование того же идентификатора является преднамеренным и полезно при переносе ранее определенного пользовательского интерфейса в приложение среда выполнения Windows с помощью C++, C#или Visual Basic.

Второе объявление сопоставляет отдельное пространство имен XAML для элементов языка, определяемых XAML, сопоставляя его (обычно) с префиксом x:: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Это значение xmlns и префикс x:, с которым он сопоставляется, также идентичен определениям, используемым в нескольких предшественниках технологий Майкрософт, использующих XAML.

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

Язык XAML задает определенные языковые элементы, и каждый из них должен быть доступен с помощью реализаций обработчика XAML, работающих с пространством имен XAML. Соглашение о сопоставлении "x:" для пространства имен XAML языка XAML следует шаблонам проектов, примеру кода и документации по функциям языка. Пространство имен языка XAML определяет несколько часто используемых функций, которые необходимы даже для базовых приложений среда выполнения Windows с помощью C++, C#или Visual Basic. Например, чтобы присоединить любой код программной части к XAML-файлу через частичный класс, необходимо присвоить этому классу имя атрибута x:Class в корневом элементе соответствующего XAML-файла. Или любой элемент, определенный на странице XAML в качестве ключа ресурса в ссылках на ресурсы ResourceDictionary и XAML, должен иметь атрибут x:Key, заданный для элемента объекта.

Пространства имен кода, сопоставленные с пространством имен XAML по умолчанию

Ниже приведен список пространств имен кода, которые в настоящее время сопоставлены с пространством имен XAML по умолчанию.

  • Windows.UI
  • Windows.UI.Xaml
  • Windows.UI.Xaml.Automation
  • Windows.UI.Xaml.Automation.Peers
  • Windows.UI.Xaml.Automation.Provider
  • Windows.UI.Xaml.Automation.Text
  • Windows.UI.Xaml.Controls
  • Windows.UI.Xaml.Controls.Primitives
  • Windows.UI.Xaml.Data
  • Windows.UI.Xaml.Documents
  • Windows.UI.Xaml.Input
  • Windows.UI.Xaml.Interop
  • Windows.UI.Xaml.Markup
  • Windows.UI.Xaml.Media
  • Windows.UI.Xaml.Media.Animation
  • Windows.UI.Xaml.Media.Imaging
  • Windows.UI.Xaml.Media.Media3D
  • Windows.UI.Xaml.Navigation
  • Ресурсы Windows.UI.Xaml.Resources
  • Windows.UI.Xaml.Shapes
  • Windows.UI.Xaml.Threading
  • Windows.UI.Text

Другие пространства имен XAML

Помимо пространства имен по умолчанию и пространства имен XAML языка XAML "x:", вы также можете увидеть другие сопоставленные пространства имен XAML в исходном xaml по умолчанию для приложений, созданных Microsoft Visual Studio.

d: (http://schemas.microsoft.com/expression/blend/2008)

Пространство имен XAML "d:" предназначено для поддержки конструктора, в частности, в области конструктора XAML Microsoft Visual Studio. Пространство имен XAML "d:" включает атрибуты конструктора или времени разработки в элементах XAML. Эти атрибуты конструктора влияют только на аспекты проектирования поведения XAML. Атрибуты конструктора игнорируются, если тот же XAML загружается среда выполнения Windows средство синтаксического анализа XAML при запуске приложения. Как правило, атрибуты конструктора допустимы для любого элемента XAML, но на практике существуют только определенные сценарии, в которых применение атрибута конструктора подходит самостоятельно. В частности, многие атрибуты конструктора предназначены для улучшения взаимодействия с контекстами данных и источниками данных при разработке XAML и кода, использующих привязку данных.

  • d:DesignHeight и d:DesignWidth: эти атрибуты иногда применяются к корню XAML-файла, который создает Visual Studio или другая область конструктора XAML. Например, эти атрибуты задаются в корневом каталоге UserControl xaml, созданном при добавлении нового UserControl в проект приложения. Эти атрибуты упрощают структуру композиции содержимого XAML, чтобы можно было предвидеть ограничения макета, которые могут существовать после использования содержимого XAML для экземпляра элемента управления или другой части более крупной страницы пользовательского интерфейса.

Обратите внимание, что при переносе XAML из Microsoft Silverlight могут быть эти атрибуты на корневых элементах, представляющих всю страницу пользовательского интерфейса. В этом случае может потребоваться удалить атрибуты. Другие функции конструкторов XAML, например симулятор, скорее всего, более полезны для проектирования макетов страниц, обрабатывающих масштабирование и просмотр состояний, чем макет страницы фиксированного размера с помощью d:DesignHeight и d:DesignWidth.

  • атрибут d:DataContext: этот атрибут можно задать на корне страницы или элемент управления, чтобы переопределить любой явный или унаследованный объект DataContext , который в противном случае имеется.
  • атрибут d:DesignSource: указывает источник данных во время разработки для CollectionViewSource, переопределяя источник.
  • d:DesignInstance и расширения разметки d:DesignData: эти расширения разметки используются для предоставления ресурсов данных во время разработки для d:DataContext или d:DesignSource. Мы не полностью задокументируем, как использовать ресурсы данных во время разработки. Дополнительные сведения см. в разделе "Атрибуты времени разработки". Некоторые примеры использования см. в разделе "Примеры данных" в области конструктора и для создания прототипов.

mc: (http://schemas.openxmlformats.org/markup-compatibility/2006)

"mc:" указывает и поддерживает режим совместимости разметки для чтения XAML. Как правило, префикс "d:" связан с атрибутом mc:Ignorable. Этот метод позволяет синтаксизаторам XAML во время выполнения игнорировать атрибуты конструктора в "d:".

local: и common:

"local:" — это префикс, который часто сопоставляется с вами на страницах XAML для шаблона проекта приложения UWP. Он сопоставляется с тем же пространством имен, которое создано для хранения атрибута x:Class и кода для всех файлов XAML, включая app.xaml. Если вы определяете любые пользовательские классы, которые вы хотите использовать в XAML в этом же пространстве имен, можно использовать локальный префикс: префикс для ссылки на пользовательские типы в XAML. Связанный префикс, поступающий из шаблона проекта приложения UWP, является общим:. Этот префикс ссылается на вложенное пространство имен Common, содержащее классы служебной программы, такие как преобразователи и команды, и вы можете найти определения в папке Common в представлении Обозреватель решений.

vsm:

Не используйте. Vsm:" — это префикс, который иногда наблюдается в старых шаблонах XAML, импортированных из других технологий Майкрософт. Пространство имен первоначально устранено с проблемой с устаревшим средством пространства имен. Необходимо удалить определения пространства имен XAML для vsm:" в любом XAML, используемом для среда выполнения Windows, и изменить любые значения префикса для VisualState, VisualStateGroup и связанных объектов, чтобы использовать пространство имен XAML по умолчанию. Дополнительные сведения о миграции XAML см. в статье "Миграция Silverlight" или WPF XAML/code в приложение среда выполнения Windows.

Сопоставление настраиваемых типов с пространствами имен и префиксами XAML

Вы можете сопоставить пространство имен XAML, чтобы использовать XAML для доступа к собственным пользовательским типам. Другими словами, вы сопоставляете пространство имен кода, как оно существует в представлении кода, определяющем пользовательский тип, и присваиваете ему пространство имен XAML вместе с префиксом для использования. Пользовательские типы для XAML можно определить на языке Microsoft .NET (C# или Microsoft Visual Basic) или в C++. Сопоставление выполняется путем определения префикса xmlns . Например, xmlns:myTypes определяет новое пространство имен XAML, доступ к которому осуществляется путем префикса всех использования с маркером myTypes:.

Определение xmlns включает значение, а также именование префикса . Значение — это строка, которая идет внутри кавычки, после знака равенства. Общее соглашение XML заключается в связывании пространства имен XML с универсальным идентификатором ресурса (URI), поэтому существует соглашение об уникальности и идентификации. Вы также видите это соглашение для пространства имен XAML по умолчанию и пространства имен XAML языка XAML, а также для некоторых менее используемых пространств имен XAML, используемых среда выполнения Windows XAML. Но для пространства имен XAML, которое сопоставляет пользовательские типы, вместо указания URI, вы начинаете определение префикса с маркером using:. После маркера using:вы назовете пространство имен кода.

Например, чтобы сопоставить префикс custom1, позволяющий ссылаться на пространство имен CustomClasses и использовать классы из этого пространства имен или сборки в качестве элементов объекта в XAML, страница XAML должна содержать следующее сопоставление в корневом элементе: xmlns:custom1="using:CustomClasses"

Частичные классы той же области страницы не нужно сопоставлять. Например, для ссылки на обработчики событий, определенные для обработки событий из определения пользовательского интерфейса XAML страницы, не требуются префиксы. Кроме того, многие начальные страницы XAML из Visual Studio создали проекты для приложения среда выполнения Windows с помощью C++, C#или Visual Basic уже сопоставляют префикс local:, который ссылается на пространство имен по умолчанию, указанное проектом, и пространство имен, используемое определениями разделяемых классов.

Правила языка CLR

Если вы пишете код резервного копирования на языке .NET (C# или Microsoft Visual Basic), вы можете использовать соглашения, использующие точку (".") в составе имен имен, чтобы создать концептуальную иерархию пространств имен кода. Если определение пространства имен содержит точку, точка должна быть частью значения, указанного после маркера using:.

Если файл кода или файл определения кода является файлом C++, существуют определенные соглашения, которые по-прежнему соответствуют языковой форме среды CLR, чтобы не было различий в синтаксисе XAML. Если вы объявляете вложенные пространства имен в C++, разделитель между последовательными строками вложенных пространств имен должен быть "." вместо ":", если указать значение, следующее за токеном using:.

Не используйте вложенные типы (например, вложение перечисления в класс) при определении кода для использования с XAML. Не удается оценить вложенные типы. Средство синтаксического анализа XAML не позволяет различать, что точка является частью имени вложенного типа, а не частью имени пространства имен.

Пользовательские типы и сборки

Имя сборки, определяющей типы резервного копирования для пространства имен XAML, не указано в сопоставлении. Логика, для которой доступны сборки, контролируется на уровне определения приложения и является частью основных принципов развертывания и безопасности приложений. Объявите любую сборку, которую вы хотите включить в качестве источника определения кода для XAML в качестве зависимой сборки в параметрах проекта. Дополнительные сведения см. в статье "Создание компонентов среда выполнения Windows в C# и Visual Basic".

Если вы ссылаетесь на пользовательские типы из определения приложения первичного приложения или определений страниц, эти типы доступны без дополнительной зависимой конфигурации сборки, но по-прежнему необходимо сопоставить пространство имен кода, содержащее эти типы. Обычное соглашение заключается в сопоставлении префикса "local" для пространства имен кода по умолчанию для любой заданной страницы XAML. Это соглашение часто включается в начальные шаблоны проектов для проектов XAML.

Вложенные свойства

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