gpt4 book ai didi

c# - 可以在 WPF 中使用与 XAML 2009 相关的标记扩展吗?

转载 作者:IT王子 更新时间:2023-10-29 04:44:00 35 4
gpt4 key购买 nike

我说的是 x:Referencex:FactoryMethod 等扩展,它们共同出现 here .我在网上阅读了很多相互矛盾的信息,包括 MSDN、Stackoverflow 和其他来源。

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

XAML 2009 Language Support in WPF

In WPF, you can use XAML 2009 features, but only for XAML that is not WPF markup-compiled. Markup-compiled XAML and the BAML form of XAML do not currently support the XAML 2009 language keywords and features. Note that existing techniques for loading loose XAML in WPF also have possible security and access restrictions to CLR types and the type system that are more restrictive than for markup-compiled XAML. For more information, see Security (WPF) or WPF Security Strategy - Platform Security. XAML 2009 also introduces additional features that either modify the previous XAML 2006 constructs or that modify the basic markup forms.

x:Reference Markup Extension

x:Reference is a construct defined in XAML 2009. In WPF, you can use XAML 2009 features, but only for XAML that is not WPF markup-compiled. Markup-compiled XAML and the BAML form of XAML do not currently support the XAML 2009 language keywords and features.

但是,下一段出现在上一段之前(即关于x:Reference 的那段)。

In WPF and XAML 2006, element references are addressed by the framework-level feature of ElementName binding. For most WPF applications and scenarios, ElementName binding should still be used. Exceptions to this general guidance might include cases where there are data context or other scoping considerations that make data binding impractical and where markup compilation is not involved.

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

然后,我们有以下摘自《WPF 4 Unleashed》一书的摘录:

The x:Reference markup extension is often mistakenly associated with the XAML2009 features that can only be used from loose XAML at the time of this writing. Although x:Reference is a new feature in WPF 4, it can be used from XAML2006 just fine as long as your project is targeting version 4 or later of the .NET Framework.

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

  1. What would be an alternative to x:Reference?
  2. XAML 2009 - x:Reference - Any downside to using this?
  3. When is x:Reference in WPF resolved and why does XAML element order affect it?

最后,我个人使用了 x:Reference 扩展,它似乎在 WPF 应用程序中工作,无论 MSDN 怎么说,即使 Visual Studio 有时会提示奇怪的事情(或者它可能是ReSharper),例如标记中的空引用异常。

进入实际问题,

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

最佳答案

我将从头开始:


Why is there so much confusion regarding all of this?

也许是因为到目前为止,包括 WPF 4.5 在内的一个版本,几乎完全不支持 XAML 2009。Freestyle 引用自 Matthew MacDonald WPF 4.5, Chapter 2 一书:

Minimum improve XAML 2009 is still not fully implemented. They only support unrelated files XAML, but not resource type of Page (compiled resource), which are used everywhere. Probably, XAML 2009 will never be a fully integrated part of WPF, because it provided improvements are particularly not important and as any change in XAML compiler generates problems of security and performance.

关于 XAML 2009 的 future ,我们不能确定它何时会完全支持,但我们知道目前它不存在。


Can these specific extensions be used in writing WPF applications? Are there any limitations in using them?

是的,WPF 4.0 和 WPF 4.5 中可能会使用一些扩展,例如:x:Array和其他类型,以及x:Reference , x:FactoryMethod .我个人确实在 XAML 2009 中使用类型并且没有发现任何错误。

关于 x:Reference 可以说,在 Visual Studio 2010 中它无法正常工作:使用 时x:Reference 作为某个 Control 的 Target,Visual Studio 设计器抛出一个 InvalidOperationException 异常并显示消息:

Service provider is missing the INameResolver service.

该项目将编译和执行没有任何问题,但 x:Reference 出现的 Design Canvas 将由于异常而被禁用。就我个人而言,它有时出现,有时不出现,但应该忽略它。

但我几乎完全知道在 WPF 4.5 版本中修复了这个错误,也许对于 Visual Studio 比 2010 年更多。有关详细信息,请参阅此 link .

关于x:FactoryMethod 这里也一样,并不是一帆风顺,对于WPF 4.0的我来说,VisualStudio 2010程序不是用它编译的。还在 connect.microsoft.com 上创建了错误报告,但微软的代表表示:

The WPF team has recently reviewed this issue and will not be addressing this issue as at this time the team is focusing on the bugs impacting the highest number of WPF developers. If you believe that this was resolved in error, please reactivate this bug with any necessary supporting details.


Can XAML 2009 be used (in whole or in part) in WPF applications?

一个明确的答案:部分可以使用,但可能不适用于每个版本的 WPF 和 Visual Studio。

如果你的项目计划在未来移植到 WPF 版本 < 4.0 或更高版本,或者在其他平台上,例如 Silverlight、Windows Phone,我认为最好避免使用 XAML 2009,因为无法保证它们将是它,至少部分支持。例如,Silverlight在XAML 2009中不支持,甚至XAML 2006也不完全支持。可能有很大一部分项目可以依赖XAML 2009,因此必须花费一定的时间和资源来摆脱这种依赖。在这种情况下,最好使用更通用的解决方案。

如果您使用的是 WPF 4.0 及更高版本,并且没有移植到其他平台的计划,我认为在测试后部分可以使用 XAML 2009。

有关详细信息,我建议您熟悉 XAML 2009 表示法:

MSDN: Microsoft Domain-Specific Languages

关于c# - 可以在 WPF 中使用与 XAML 2009 相关的标记扩展吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22414862/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com