WPF - 全局添加 xaml 命名空间声明

问题描述 投票:0回答:2

我有一个相当庞大的 WPF 应用程序,其中包含大量 XAML 文件。每个 XAML 文件都有 5 到 10 个 clr 到 xml 命名空间映射

xmlns:abc="clr-namespace:Abcdef"

它看起来很糟糕,并且在每个文件中写入都很痛苦。

有没有办法在全球范围内定义它们?

wpf xaml xml-namespaces
2个回答
14
投票

无法跨文件全局定义它们。这是 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
投票

假设你有两个“WPF类库项目”

  1. 按钮库
  2. 文本框库

现在您想要使用单个

xmlns:myCtrl
前缀将这些程序集中定义的类或控件引用到主 WPF 应用程序。

为此,您必须在“WPF 类库项目”中添加一个

AssemblyInfo.cs
文件,然后必须将这些项目中的所有 CLR 命名空间映射到一个或多个 XML 命名空间。

之前的 VisualStudio 解决方案

使用VisualStudio后的解决方案

XmlnsDefinition

© www.soinside.com 2019 - 2024. All rights reserved.