WPF - 不再使用 <?Mapping > 了吗?

标签 wpf namespaces assemblies xml-namespaces

基本上,我记得曾经有一段时间您可以使用以下内容:<?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 命名空间映射到 SAME XML 命名空间(这样在我的整个应用程序中,我只需要包含一个 XML 命名空间)。有没有办法做到这一点?

最佳答案

似乎仍然无法在 WPF 项目中映射本地命名空间。书Programming WPF: Building Windows UI with Windows Presentation Foundation (2007 年出版)指出:

Visual Studio 中的 WPF 项目不能使用由 XmlnsDefinitionAttribute 引入的命名空间来自位于同一程序集中的 XAML。如果要引用本地定义的类型,则必须使用替代机制...

“替代机制”是可怕的xmlns:local="..."对于每个命名空间。

我的理解是执行程序集(在本例中为本地 WPF 程序集)搜索所有引用的程序集 XmlnsPrefixAttributeXmlnsDefinitionAttribute但不搜索自身。 4 年后这种行为没有改变是没有意义的,但情况似乎确实如此。

关于WPF - 不再使用 <?Mapping > 了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5950706/

相关文章:

c# - 绑定(bind)到父 DataContext 中的依赖属性

oop - 如何在 OOP 中实现多种类型的对象?

c# - Visual Studio 命名空间约定

.net - 是否可以将 Windows 程序集转换为单声道?

c# - 用户权限控制

wpf - ListView.SelectionChanged 为 RoutedCommand

c# - 获取 ComboBox 绑定(bind)多列列表的选定项

c# - 在决定是否创建另一个 Visual Studio 项目 (.NET) 时应使用什么标准?

.net - 是否可以从vbscript执行.NET程序集(dll)?

reflection - 使用反射获取属性时,如何将搜索限制在我感兴趣的子类上?