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命名空间).有办法吗?
看来仍然无法在 WPF 项目中映射本地命名空间。《Programming WPF: Building Windows UI with Windows Presentation Foundation》(2007 年出版)一书指出:
Visual Studio 中的 WPF 项目无法使用由XmlnsDefinitionAttribute位于同一程序集中的 XAML 引入的命名空间。如果你想引用本地定义的类型,你必须使用替代机制......
“替代机制”xmlns:local="..."对于每个命名空间来说都是令人恐惧的。
我的理解是,执行程序集(在本例中为本地 WPF 程序集)会搜索所有引用的程序集以查找XmlnsPrefixAttribute和XmlnsDefinitionAttribute,但不会搜索自身。四年后这种行为没有改变是没有道理的,但事实似乎就是如此。
| 归档时间: |
|
| 查看次数: |
304 次 |
| 最近记录: |