当前位置: 首页 > 编程语言 > C#

XAML2009相关的标记扩展可以在WPF中使用吗?

时间:2023-04-10 13:13:18 C#

是否可以在WPF中使用XAML2009相关的标记扩展?我说的是扩展,例如x:Reference和x:FactoryMethod,它们在这里一起出现。我在网上阅读了很多相互矛盾的信息,包括MSDN、Stackoverflow和其他来源。我将以x:Reference为例进行讨论,但实际上我也指的是其他标记扩展。混淆的主要来源是以下MSDN摘录:WPF中的XAML2009语言支持在WPF中,您可以使用XAML2009功能,但仅限于非WPF标记编译的XAML。标记编译的XAML和XAML的BAML形式目前不支持XAML2009语言关键字和函数。请注意,用于在WPF中加载松散XAML的现有技术也可能对CLR类型和类型系统具有安全和访问限制,这些限制比标记编译的XAML更严格。有关详细信息,请参阅安全性(WPF)或WPF安全策略-平台安全性。XAML2009还引入了其他功能来修改以前的XAML2006构造或修改基本标记表单。x:Reference标记扩展x:Reference是XAML2009中定义的构造。在WPF中,您可以使用XAML2009功能,但仅适用于非WPF标记编译的XAML。标记编译的XAML和XAML的BAML形式目前不支持XAML2009语言关键字和函数。但是,下一段出现在上一段之前(即关于x:Reference的那一段)。在WPF和XAML2006中,元素引用由绑定到ElementName的框架级函数处理。对于大多数WPF应用程序和方案,仍应使用ElementName绑定。本一般指南的例外情况可能包括存在数据上下文或其他范围考虑因素导致数据绑定不切实际且不涉及标记编译的情况。这里并没有直接的矛盾,但是这一段似乎是说在应用程序中使用x:Reference是可以的。此外,关于x:Reference的段落似乎是自动生成的,可能已过时。然后,我们从“WPF4Unleashed”一书中摘录如下:x:reference标记扩展通常错误地与XAML2009功能相关联,这些功能在撰写本文时只能从松散的XAML中获得。尽管x:Reference是WPF4中的一项新功能,但只要您的项目面向.NETFramework版本4或更高版本,您就可以在XAML2006中使用它。我们还有以下Stackoverflow问题,其中一些问题的答案相互矛盾,而且没有一个是明确正确的:Whatisalternativetox:reference?XAML2009-x:reference-使用它有什么缺点吗?何时在WPF中解析x:references,为什么XAML元素顺序会影响它?最后,我个人使用x:Reference扩展,它似乎在WPF应用程序中工作,无论MSDN怎么说,即使VisualStudio有时会抱怨奇怪的事情(或者它可能是ReSharper),例如在标记中。了解实际问题,我可以在WPF应用程序中使用XAML2009(全部或部分)吗?可以使用这些特定的扩展来编写WPF应用程序吗?使用它们有什么限制吗?为什么在这一切中有如此多的混乱?我将从最后开始:为什么对这一切有如此多的困惑?可能是因为到目前为止几乎完全不支持XAML2009,包括WPF4.5。MatthewMacDonaldWPF4.5的自由式引用,第2章书:最小改进XAML2009仍未完全实现。它们只支持不相关的文件XAML,而不支持随处使用的Page(编译资源)资源类型。XAML2009可能永远不会成为WPF的完全集成部分,因为它提供的改进特别不重要,因为对XAML编译器的任何更改都会带来安全和性能问题。关于XAML2009的未来,我们不能确定它何时会得到完全支持,但我们知道目前它不存在。这些特定的扩展可以用于编写WPF应用程序吗?使用它们有什么限制吗?是的,在WPF4.0和WPF4.5中可以使用一些扩展,例如:x:Array等类型,以及x:Reference、x:FactoryMethod。我个人在XAML2009中使用类型并且没有发现任何错误。关于x:Reference可以说些什么,它在VisualStudio2010中无法正常工作:使用x:Reference作为控件的目标时,VisualStudio设计器会抛出InvalidOperationException异常并显示以下消息:服务提供者缺少INameResolver服务。该项目将编译和执行没有任何问题,但由于异常,x:Reference出现的Designcanvas将被禁用。就我个人而言,我有时明白有时不明白,但应该忽略它。但我几乎完全知道,对于WPF4.5版本以及VisualStudio中比2010更高的版本,此错误已得到修复。有关详细信息,请参阅此链接。关于x:FactoryMethod也在这里,并非一切顺利,对我来说,在WPF4.0中,VisualStudio2010程序无法用它编译。在connect.microsoft.com上也创建了一个错误报告,但微软的一位代表说:WPF团队最近审查了这个问题并且不会解决它,因为此时该团队正在关注影响大多数WPF开发人员的错误。如果您认为这是错误,请使用任何必要的支持详细信息重新激活此错误。XAML2009能否(全部或部分)用于WPF应用程序?一个明确的答案:Part可以使用,但可能不是在每个版本的WPF和VisualStudio中。如果您的项目计划在将来移植到WPF版本<4.0或更高版本,或者在其他平台(如Silverlight、WindowsPhone)上,我认为最好避免使用XAML2009,因为不能保证它们会是,至少部分支持.例如,在Silverlight中,不支持XAML2009,甚至不完全支持XAML2006。可能是项目的很大一部分可能依赖于XAML2009,因此必须花费一些时间和资源来摆脱这种依赖性。在这种情况下,最好使用更通用的解决方案。如果你使用的是WPF4.0及以上版本,并且没有移植到其他平台的计划,我认为经过测试,部分可以使用XAML2009。更多信息,建议大家熟悉XAML2009notation:MSDN:MicrosoftDomain-SpecificLanguages以上是C#学习教程:CanXAML2009relatedmarkupextensionsbeusedinWPF?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: