2011-10-27 55 views
10

我有一个相当大的WPF应用程序与许多XAML文件。每个单独的XAML文件都有5到10个clr到xml命名空间映射xmlns:abc="clr-namespace:Abcdef"
它看起来很糟糕,并且在每个文件中写入都很痛苦。WPF - 全局添加xaml命名空间声明

有没有一种方法来定义这些全球?

回答

13

无法在文件间全局定义它们。这是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> 
+0

我没有任何运气在引用在不同的程序集中定义的名称空间时得到这个工作。 – Maslow

+0

@Maslow http://stackoverflow.com/questions/4225072/refering-to-another-project-in-xaml-undefined-clr-namespace –