基本上,我记得曾经有一段时间您可以使用以下内容:<?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 程序集)搜索所有引用的程序集 XmlnsPrefixAttribute
和 XmlnsDefinitionAttribute
但不搜索自身。 4 年后这种行为没有改变是没有意义的,但情况似乎确实如此。
关于WPF - 不再使用 <?Mapping > 了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5950706/