基本上,我记得曾经有一段时间你可以使用以下内容:<?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-Namespaces指向相同的XML命名空间......
xmlns:xyz="http://schemas.mycompany.com/netfx/xaml/presentation"
该行使我可以访问XYZ.Wpf.Controls和XYZ.Wpf.Commands。问题是这只有在程序集已经编译时才有效。在同一个程序集中工作时,我不能使用这个技巧。
基本上,在同一应用程序或程序集中,我想在全局范围内将不同的CLR命名空间映射到SAME XML命名空间(在整个应用程序中,我只需要包含一个XML命名空间)。有办法吗?
答案 0 :(得分:1)
似乎仍无法在WPF项目中映射本地名称空间。书Programming WPF: Building Windows UI with Windows Presentation Foundation(2007年出版)指出:
Visual Studio中的WPF项目不能使用来自XAML的XmlnsDefinitionAttribute
引入的名称空间,这些名称空间位于同一个程序集中。如果要引用本地定义的类型,则必须使用备用机制...
“替代机制”是每个命名空间的可怕xmlns:local="..."
。
我的理解是执行程序集(在本例中是本地WPF程序集)搜索XmlnsPrefixAttribute
和XmlnsDefinitionAttribute
的所有引用的程序集,但不搜索自身。 4年后这种行为没有改变是没有意义的,但事实似乎就是这样。