WPF - <?mapping>是否已被使用?

m-y*_*m-y 5 wpf assemblies namespaces xml-namespaces

基本上,我记得曾经有一段时间你可以使用以下内容:( <?Mapping ... >它似乎不再起作用了 - 也许是贬值了?)

我知道我可以像我这样映射我的XML命名空间......

xmlns:xyzcon="clr-namespace:XYZ.Wpf.Controls"
xmlns:xyzcom="clr-namespace:XYZ.Wpf.Commands"
Run Code Online (Sandbox Code Playgroud)

但是,我也知道我可以映射我的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")]
Run Code Online (Sandbox Code Playgroud)

这使得它非常容易使用,因为相反具有l,lv等前缀我可以让我所有的CLR命名空间指向相同的XML命名空间...

xmlns:xyz="http://schemas.mycompany.com/netfx/xaml/presentation"
Run Code Online (Sandbox Code Playgroud)

该行使我可以访问XYZ.Wpf.Controls和XYZ.Wpf.Commands.问题是这只有在程序集已经编译时才有效.在同一个程序集中工作时,我无法使用此技巧.

基本上,在同一个应用程序或程序集中,我想在全局范围内将不同的CLR命名空间映射到SAME XML命名空间(在整个我的应用程序中,我只需要包含一个XML命名空间).有办法吗?

sel*_*dog 2

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

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

“替代机制”xmlns:local="..."对于每个命名空间来说都是令人恐惧的。

我的理解是,执行程序集(在本例中为本地 WPF 程序集)会搜索所有引用的程序集以查找XmlnsPrefixAttributeXmlnsDefinitionAttribute,但不会搜索自身。四年后这种行为没有改变是没有道理的,但事实似乎就是如此。