Что такое xmlns в каждом файле WPF? - PullRequest
42 голосов
/ 10 марта 2009

Что такое xmlns?

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

Ответы [ 4 ]

53 голосов
/ 10 марта 2009

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 разрешения имен.

  1. StackPanel - поскольку это неполное имя, оно будет разрешено в пространстве имен по умолчанию WPF
  2. x: Имя - для имени указано x и оно будет разрешено в документе XAML.
22 голосов
/ 10 марта 2009

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

xmlns:local="clr-namespace:MyWpfProject"

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

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

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

10 голосов
/ 12 марта 2009

Вы также можете отобразить несколько пространств имен 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, которые вы объединяете вместе.

6 голосов
/ 10 марта 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...