WPF — используется ли ‹?Mapping ›?

По сути, я помню, что было время, когда вы могли использовать следующее: <?Mapping ... > (Кажется, это больше не работает — возможно, устарело?)

Я знаю, что могу сопоставить свои пространства имен XML так...

xmlns:xyzcon="clr-namespace:XYZ.Wpf.Controls"
xmlns:xyzcom="clr-namespace:XYZ.Wpf.Commands"

Но я также знаю, что могу отображать свои пространства имен XML так (намного чище)

[assembly: XmlnsPrefix("http://schemas.mycompany.com/netfx/xaml/presentation", "xyz")]
[assembly: XmlnsDefinition("http://schemas.mycompany.com/netfx/xaml/presentation", "XYZ.Wpf.Controls")]
[assembly: XmlnsDefinition("http://schemas.mycompany.com/netfx/xaml/presentation", "XYZ.Wpf.Commands")]

что делает его очень простым в использовании, потому что вместо префикса l, lv и т. д. я могу сделать так, чтобы все мои CLR-пространства имен указывали на одно и то же пространство имен XML...

xmlns:xyz="http://schemas.mycompany.com/netfx/xaml/presentation"

Эта строка дает мне доступ к XYZ.Wpf.Controls и XYZ.Wpf.Commands. Проблема в том, что это работает, только если сборка уже скомпилирована. Я не могу использовать этот трюк при работе в одной сборке.

По сути, из одного и того же приложения или сборки я хочу сопоставить разные пространства имен CLR с одним и тем же пространством имен XML в глобальном масштабе (таким образом, во всем моем приложении мне просто нужно включить это одно пространство имен XML). Любой способ сделать это?


person myermian    schedule 10.05.2011    source источник


Ответы (1)


Похоже, что до сих пор нет способа сопоставить локальные пространства имен в проекте WPF. Книга Программирование WPF: создание пользовательского интерфейса Windows с помощью Windows Presentation Foundation (опубликовано в 2007 г.) гласит:

Проекты WPF в Visual Studio не могут использовать пространства имен, представленные XmlnsDefinitionAttribute из XAML, которые находятся в той же сборке. Если вы хотите сослаться на локально определенные типы, вы должны использовать альтернативный механизм...

«Альтернативный механизм» — это страшный xmlns:local="..." для каждого пространства имен.

Насколько я понимаю, исполняемая сборка (в данном случае локальная сборка WPF) ищет во всех упомянутых сборках как XmlnsPrefixAttribute, так и XmlnsDefinitionAttribute, но не ищет себя. Не имеет смысла, что спустя 4 года это поведение не изменилось, но, похоже, это так.

person sellmeadog    schedule 22.09.2011
comment
А как насчет тегов ‹?Mapping ›? Есть какая-нибудь информация о них? Сам ничего не могу найти. - person myermian; 23.09.2011
comment
Лично я никогда ничего не видел в этом теге и не помню, чтобы на него ссылались. Как и вы, я тоже ничего не могу найти на нем, ни в прошлом, ни в настоящем. - person sellmeadog; 23.09.2011
comment
Наконец-то я нашел сообщение на форуме MSDN, типа... но не реальную ссылку на него: social.msdn.microsoft.com/Forums/en/wpf/thread/ - person myermian; 07.03.2012