Подтвердить что ты не робот

Что такое xmlns в каждом файле WPF?

Что такое xmlns?

Какую роль он играет в файле XAML при создании проекта WPF?

4b9b3361

Ответ 1

xmlns - это XML, не обязательно XAML, конструкция, которая определяет пространство имен, в котором разрешено имена xml-элементов. Поскольку он определен без квалификатора, он определяет пространство имен по умолчанию, с помощью которого должно быть разрешено имя элемента XML.

В XAML вы обычно видите следующую запись. Он определяет пространство имен по умолчанию, которое будет по существу WPF, и все имена XML-элементов, следовательно, будут разрешены как элементы WPF.

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

Также широко распространено пространство имен, не относящееся к стандарту, например следующее.

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

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

<StackPanel x:Name="foo" />

В этом определении есть 2 разрешения имен.

  • StackPanel - поскольку это неквалифицированное имя, оно будет разрешено в пространстве имен по умолчанию, которое представляет собой WPF
  • x: Имя - Имя имеет квалификацию с x и будет разрешено в документе XAML.

Ответ 2

И вы используете xmlns для получения ссылки на свои собственные пространства имен в вашем XAML. Одной из первых вещей, которые я делаю при создании нового проекта WPF, является добавление ссылки на пространство имен проекта:

xmlns:local="clr-namespace:MyWpfProject"

Теперь у меня есть доступ к любым классам, которые я могу создать в моем проекте (например, IValueConverters и DataTemplateSelectors), используя префикс "local:"

<local:BooleanToColorConverter x:Key="booleanToColorConverter" DefaultBrush="Green" HighlightBrush="Red" />

Конечно, вам не нужно использовать "local", вы можете назвать его, как хотите. И вы можете добавить ссылки на любое другое пространство имен, которое вам нужно так же.

Ответ 3

Вы также можете сопоставить несколько пространств имен CLR в одном пространстве имен XML, добавив XmlnsDefinitionAttribute к вашим сборкам. Это то, что сделала команда WPF, сопоставляя множество пространств имен в System.Windows следующим образом:

[XmlnsDefinitionAttribute(
    "http://schemas.microsoft.com/winfx/2006/xaml/presentation", 
    "System.Windows.Controls")]
[XmlnsDefinitionAttribute(
    "http://schemas.microsoft.com/winfx/2006/xaml/presentation", 
    "System.Windows.Ink")]

Этот синтаксис может упростить ваш XAML, но будьте осторожны, чтобы не иметь классов с тем же именем в пространствах имен CLR, с которыми вы сливаетесь.

Ответ 4

Как взято из MSDN Корневой элемент также содержит атрибуты xmlns и xmlns: x. Эти атрибуты указывают на процессор XAML, в котором пространства имен XML содержат определения элементов для элементов, которые будут ссылаться на разметку. Атрибут xmlns специально указывает пространство имен XML по умолчанию.

Это использование xmlns для определения области использования и сопоставления соответствует спецификации XML 1.0.

Надеюсь, что это поможет.