我说的是 和 之类的扩展名x:Reference
,在这里x:FactoryMethod
集体出现。我在网上阅读了很多相互矛盾的信息,包括 MSDN、Stackoverflow 和其他来源。
我将x:Reference
作为示例进行讨论,但实际上我也指的是其他标记扩展。造成混淆的主要原因是 MSDN 的以下摘录:
在 WPF 中,您可以使用 XAML 2009 功能,但仅适用于不是 WPF 标记编译的 XAML。标记编译的 XAML 和 XAML 的 BAML 形式目前不支持 XAML 2009 语言关键字和功能。请注意,在 WPF 中加载松散 XAML 的现有技术也可能对 CLR 类型和类型系统具有比标记编译的 XAML 更具限制性的安全性和访问限制。有关详细信息,请参阅安全 (WPF) 或 WPF 安全策略 - 平台安全。XAML 2009 还引入了修改以前的 XAML 2006 构造或修改基本标记形式的附加功能。
x:Reference 是在 XAML 2009 中定义的构造。在 WPF 中,您可以使用 XAML 2009 功能,但仅适用于非 WPF 标记编译的 XAML。标记编译的 XAML 和 XAML 的 BAML 形式目前不支持 XAML 2009 语言关键字和功能。
但是,下一段出现在上一段之前(即 about x:Reference
)。
在 WPF 和 XAML 2006 中,元素引用由 ElementName 绑定的框架级功能处理。对于大多数 WPF 应用程序和方案,仍应使用 ElementName 绑定。此一般指南的例外情况可能包括存在数据上下文或其他范围考虑因素导致数据绑定不切实际以及不涉及标记编译的情况。
这里并没有直接的矛盾,但是这一段似乎是说可以x:Reference
在应用程序中使用。此外,关于似乎是自动生成的那段x:Reference
,并且可能已过时。
然后,我们从“WPF 4 Unleashed”一书中摘录了以下内容:
x:Reference 标记扩展经常被错误地与 XAML2009 功能相关联,这些功能在撰写本文时只能从松散的 XAML 中使用。尽管 x:Reference 是 WPF 4 中的一项新功能,但只要您的项目面向 .NET Framework 4 或更高版本,就可以从 XAML2006 使用它。
我们还有以下 Stackoverflow 问题,其中一些答案相互矛盾,没有一个明显正确:
- x:Reference 的替代品是什么?
- XAML 2009 - x:Reference - 使用这个有什么缺点吗?
- 何时解析 WPF 中的 x:Reference 以及为什么 XAML 元素顺序会影响它?
最后,我亲自使用了该x:Reference
扩展,它似乎在 WPF 应用程序中工作,无论 MSDN 说什么,尽管 Visual Studio 有时会抱怨奇怪的事情(或者可能是 ReSharper),例如标记中的空引用异常。
进入实际问题,
- XAML 2009 可以(全部或部分)在 WPF 应用程序中使用吗?
- 这些特定的扩展可以用于编写 WPF 应用程序吗?使用它们有什么限制吗?
- 为什么对这一切有如此多的困惑?