C# 是否可以在WPF中使用XAML2009相关的标记扩展?

C# 是否可以在WPF中使用XAML2009相关的标记扩展?,c#,.net,wpf,xaml,markup-extensions,C#,.net,Wpf,Xaml,Markup Extensions,我说的是一些扩展,比如x:Reference和x:FactoryMethod,它们一起出现。我在网上阅读了很多相互矛盾的信息,包括MSDN、Stackoverflow和其他来源的信息 我将以x:Reference为例,但实际上我也提到了其他标记扩展。造成混淆的主要原因是MSDN中的以下摘录: 在WPF中,可以使用XAML2009特性,但只能用于未编译WPF标记的XAML。标记编译的XAML和XAML的BAML形式目前不支持XAML2009语言关键字和功能。 请注意,在WPF中加载松散XAML的

我说的是一些扩展,比如
x:Reference
x:FactoryMethod
,它们一起出现。我在网上阅读了很多相互矛盾的信息,包括MSDN、Stackoverflow和其他来源的信息

我将以
x:Reference
为例,但实际上我也提到了其他标记扩展。造成混淆的主要原因是MSDN中的以下摘录:

在WPF中,可以使用XAML2009特性,但只能用于未编译WPF标记的XAML。标记编译的XAML和XAML的BAML形式目前不支持XAML2009语言关键字和功能。 请注意,在WPF中加载松散XAML的现有技术也可能对CLR类型和类型系统有安全性和访问限制,这些限制比标记编译的XAML更严格。有关更多信息,请参阅安全性(WPF)或WPF安全策略-平台安全性。 XAML2009还引入了修改以前的XAML2006构造或修改基本标记表单的附加功能

x:Reference是XAML2009中定义的构造。在WPF中,可以使用XAML2009特性,但只能用于未编译WPF标记的XAML。标记编译的XAML和XAML的BAML形式目前不支持XAML2009语言关键字和功能

但是,以下段落出现在上一段之前(即关于
x:Reference

在WPF和XAML2006中,元素引用由ElementName绑定的框架级特性处理。对于大多数WPF应用程序和场景,仍应使用ElementName绑定。本一般指南的例外情况可能包括数据上下文或其他范围考虑因素导致数据绑定不切实际以及不涉及标记编译的情况

这里没有直接的矛盾,但这一段似乎说可以在应用程序中使用
x:Reference
。此外,关于
x:Reference
的段落似乎是自动生成的,可能已经过时

然后,我们从《WPF4释放》一书中摘录如下:

x:Reference标记扩展经常错误地与XAML2009关联 撰写本文时只能从松散的XAML中使用的功能。虽然 x:Reference是WPF4中的一个新特性,它可以从XAML2006开始使用,只要您的项目目标是.NETFramework的版本4或更高版本

我们还有以下问题,有些答案相互矛盾,没有一个明显正确:

  • 最后,我个人使用了
    x:Reference
    扩展,无论MSDN怎么说,它似乎在WPF应用程序中都能工作,尽管Visual Studio有时会抱怨一些奇怪的事情(或者可能是重新精简),例如标记中的空引用异常

    进入实际问题

  • XAML 2009能否(全部或部分)用于WPF应用程序
  • 这些特定的扩展可以用于编写WPF应用程序吗?使用它们有什么限制吗
  • 为什么对这一切有这么多的困惑

  • 我将从结尾开始:


    为什么对这一切有这么多困惑?

    也许是因为到目前为止,包括WPF4.5版本,几乎完全不支持XAML2009。自由泳引自《马修·麦克唐纳WPF 4.5》第2章:

    XAML 2009的最低改进
    仍未完全实施。它们只支持不相关的文件XAML,但不支持
    页面
    的资源类型(编译后的资源),这在任何地方都可以使用。可能,
    XAML 2009
    永远不会成为WPF的完全集成部分,因为它提供的改进并不重要,因为XAML编译器中的任何更改都会产生安全性和性能问题

    关于XAML 2009的未来,我们无法确定它何时会完全支持,但我们知道目前它并不存在


    在编写WPF应用程序时可以使用这些特定的扩展吗?使用它们有任何限制吗?

    是的,WPF 4.0和WPF 4.5中可能会使用一些扩展,例如:和其他类型,以及。我个人确实在XAML2009中使用了类型,并且没有注意到任何bug

    关于
    x:Reference
    可以说,在
    Visual Studio 2010
    中,它不能正常工作:当使用
    x:Reference
    作为某个
    控件的目标时,Visual Studio设计器抛出一个
    invalidoOperationException
    异常,并显示以下消息:

    服务提供商缺少Inamersolver服务

    项目将编译并执行,不会出现任何问题,但是出现
    x:Reference
    Design
    画布将因异常而禁用。就我个人而言,它有时出现,有时不出现,但应该被忽略

    但我几乎完全知道WPF4.5版本中的内容,对于VisualStudio来说,这个bug可能比2010年修复得更多。有关更多信息,请参阅此

    关于
    x:FactoryMethod
    这里也一样,并不是每件事都进展顺利,对于我来说,在WPF 4.0中,VisualStudio 2010程序不是用它编译的。也创建了一份关于的错误报告,但微软代表表示:

    WPF团队最近已经审查了这个问题,并且将不会解决这个问题,因为此时团队正在关注影响最多WPF开发人员的bug。如果您认为这是错误解决的,请使用任何必要的支持详细信息重新激活此错误


    XAML 2009能否(全部或部分)用于WPF应用程序?