Почему существуют пространства имен XAML, которые являются URL-адресами? - PullRequest
15 голосов
/ 22 марта 2011

В Silverlight / WPF xaml вверху кода у вас есть объявления пространства имен / типа импорта. Я легко могу понять, как эти объявления могут указывать на сборку, чтобы из нее можно было загружать типы и т. Д. Что я не понимаю (и о чем я до сих пор не задумывался), так это как эти пространства имен работают, когда они указывают на URL-адрес, например

http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit

Просмотр этого URL дает мне ошибку, поэтому ничего не говорит.

Ответы [ 2 ]

20 голосов
/ 22 марта 2011

Существует атрибут, который вы можете использовать в коде вашей ссылочной сборки, который отображает Uri в пространства имен вашего кода:

[XmlnsDefinitionAttribute("http://yournamespace/", "Your.Assembly.Namespace")]

Вы можете включить несколько из этих атрибутов, обычно вваш AssemblyInfo.cs, позволяющий ссылаться на несколько пространств имен кода в одном пространстве имен Uri в Xaml.

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

EDIT: , если вы указываете Reflector на сборку PresentationCore, вы можете видеть атрибутынапример, на уровне сборки:

[assembly: 
    XmlnsDefinition( "http://schemas.microsoft.com/netfx/2007/xaml/presentation"
                   , "System.Windows.Ink") ]

Вот как импорт Uri отображается на пространства имен кода.

2 голосов
/ 22 марта 2011

Насколько я знаю, они являются URL-адресами только по соглашению, подойдет любой уникальный идентификатор.

Если вы проверяете типы документов HTML, они точно такие же, как в действительности не загружаются :) Например: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd или http://www.w3.org/TR/html4/strict.dtd

Нет смысла, почему на этих URL нет ничего, было бы неплохо иметь некоторые реальные ссылки ...

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