【问题标题】:WPF - Is <?Mapping > used anymore?WPF - <?Mapping > 不再使用了吗?
【发布时间】:2011-08-22 11:36:48
【问题描述】:

基本上,我记得曾经有一段时间您可以使用以下内容:&lt;?Mapping ... &gt;(它似乎不再起作用——也许已弃用?)

我知道我可以像这样映射我的 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 namespaces assemblies xml-namespaces


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 标签呢?有关于他们的信息吗?我自己似乎找不到任何东西。
    • 我个人从未在该标签上见过任何东西,我也不记得看到它被引用过。和你一样,我也找不到任何东西,过去或现在。
    • 我终于找到了一个关于它的 MSDN 论坛帖子,有点……但不是对它的实际引用:social.msdn.microsoft.com/Forums/en/wpf/thread/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 2016-10-30
    • 2016-05-10
    • 1970-01-01
    • 2022-11-10
    • 2019-11-15
    • 2018-07-24
    相关资源
    最近更新 更多