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

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

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

Ответ 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>