WPF - глобально добавить объявление пространства имен xaml

У меня довольно большое приложение WPF с большим количеством файлов XAML. Каждый файл XAML имеет от 5 до 10 сопоставлений пространства имен clr и xml xmlns:abc="clr-namespace:Abcdef".
Это выглядит ужасно, и писать в каждый файл очень тяжело.

Есть ли способ определить их глобально?


person kubal5003    schedule 27.10.2011    source источник


Ответы (1)


Невозможно определить их глобально для файлов. Это ограничение XML; XAML является его подмножеством.

Однако вы можете немного подчистить их, используя XmlnsDefinition.

См. эту статью: http://zachbonham.blogspot.com/2010/04/organize-xaml-namespace-declarations.html

Если вы начали с этого XAML:

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:treeView="clr-namespace:MaryKay.SamPortal.Common.UI.TreeView.Views;assembly=MaryKay.SamPortal.Common.UI"
    xmlns:infoBar="clr-namespace:MaryKay.SamPortal.Common.UI.InfoBar.Views;assembly=MaryKay.SamPortal.Common.UI">
  <infoBar:InformationBar DataContext="{Binding InfoBar}"/>
</UserControl>

И добавил эти атрибуты XmlnsDefinition:

[assembly: XmlnsDefinition("urn:marykay-samportal-common-ui", "MaryKay.SamPortal.Common.UI.InfoBar.Views")]
[assembly: XmlnsDefinition("urn:marykay-samportal-common-ui", "MaryKay.SamPortal.Common.UI.RoleGroupPicker.Views")]
[assembly: XmlnsDefinition("urn:marykay-samportal-common-ui", "MaryKay.SamPortal.Common.UI.BetterPopup")]
[assembly: XmlnsDefinition("urn:marykay-samportal-common-ui", "MaryKay.SamPortal.Common.UI.TextEditor")]
[assembly: XmlnsDefinition("urn:marykay-samportal-common-ui", "MaryKay.SamPortal.Common.UI.Converters")]
[assembly: XmlnsDefinition("urn:marykay-samportal-common-ui", "MaryKay.SamPortal.Common.UI.Documents")]
[assembly: XmlnsDefinition("urn:marykay-samportal-common-ui", "MaryKay.SamPortal.Common.UI.SplashScreen")]
[assembly: XmlnsDefinition("urn:marykay-samportal-common-ui", "MaryKay.SamPortal.Common.UI.TemplateSelector")]
[assembly: XmlnsDefinition("urn:marykay-samportal-common-ui", "MaryKay.SamPortal.Common.UI.ModalDialog")]
[assembly: XmlnsDefinition("urn:marykay-samportal-common-ui", "MaryKay.SamPortal.Common.UI.ConsultantSearch.Views")]
// etc...

Вместо этого вы можете получить этот XAML:

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:commonUI="urn:marykay-samportal-common-ui">
  <commonUI:InformationBar DataContext="{Binding InfoBar}"/>
</UserControl>
person Merlyn Morgan-Graham    schedule 27.10.2011
comment
Мне не повезло заставить это работать при ссылке на пространство имен, определенное в другой сборке. - person Maslow; 23.09.2016
comment
@Maslow stackoverflow.com/questions/4225072/ - person Merlyn Morgan-Graham; 24.09.2016