WPF - <? Mapping> больше используется? - PullRequest
5 голосов
/ 10 мая 2011

В основном я помню, что было время, когда вы могли использовать следующее: <?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).Есть ли способ сделать это?

1 Ответ

1 голос
/ 22 сентября 2011

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

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

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

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

...