根据MSDN上的x:Reference Markup Extension页面,x:Reference
引用在XAML标记中的其他位置声明的实例.引用引用元素的x:Name.
根据MSDN上的Binding.ElementName属性页面,ElementName
Name属性的值或x:感兴趣元素的Name Directive.
回顾第一页上的备注部分:
x:参考和WPF
在WPF和XAML 2006中,元素引用由ElementName绑定的框架级功能处理.对于大多数WPF应用程序和方案,仍应使用ElementName绑定.此一般指导的例外情况可能包括存在数据上下文或其他作用域考虑因素的情况,这些因素使得数据绑定不切实际且不涉及标记编译.
为了完整起见,这是ElementName页面上备注部分的一部分:
当您想要绑定到应用程序中另一个元素的属性时,此属性很有用.例如,如果要使用Slider控制应用程序中另一个控件的高度,或者要将控件的内容绑定到ListBox控件的SelectedValue属性.
现在,虽然我完全知道何时以及如何使用该ElementName属性,但我并不完全理解它与x:Reference标记扩展之间的区别.任何人都可以解释一下这个问题,特别是扩大x:Reference评论部分显示的最后一句话:
此一般指导的例外情况可能包括存在数据上下文或其他作用域考虑因素的情况,这些因素使得数据绑定不切实际且不涉及标记编译.
我正在谈论扩展,例如x:Reference和x:FactoryMethod集体出现在这里.我在网上阅读了很多相互矛盾的信息,包括MSDN,Stackoverflow和其他来源.
我将以x:Reference一个例子来谈谈,但我实际上也指的是其他标记扩展.混淆的主要原因是以下MSDN摘录:
在WPF中,您可以使用XAML 2009功能,但仅适用于非WPF标记编译的XAML.标记编译的XAML和BAML形式的XAML目前不支持XAML 2009语言关键字和功能.请注意,在WPF中加载松散XAML的现有技术也可能对CLR类型和类型系统提供安全性和访问限制,这些限制比标记编译的XAML更具限制性.有关更多信息,请参阅安全性(WPF)或WPF安全策略 - 平台安全性.XAML 2009还引入了其他功能,可以修改以前的XAML 2006构造或修改基本标记形式.
x:Reference是在XAML 2009中定义的构造.在WPF中,您可以使用XAML 2009功能,但仅适用于非WPF标记编译的XAML.标记编译的XAML和BAML形式的XAML目前不支持XAML 2009语言关键字和功能.
但是,以下段落出现在前一段之前(即关于一段x:Reference).
在WPF和XAML 2006中,元素引用由ElementName绑定的框架级功能处理.对于大多数WPF应用程序和方案,仍应使用ElementName绑定.此一般指导的例外情况可能包括存在数据上下文或其他作用域考虑因素的情况,这些因素使得数据绑定不切实际且不涉及标记编译.
这里没有直接的矛盾,但这一段似乎说可以x:Reference在应用程序中使用.此外,该段落x:Reference似乎是自动生成的,可能已经过时.
然后,我们从"WPF 4 Unleashed"一书中摘录如下:
x:引用标记扩展通常与XAML2009功能错误关联,这些功能只能在撰写本文时从松散的XAML中使用.虽然x:Reference是WPF 4中的一个新功能,但只要您的项目针对.NET Framework的版本4或更高版本,就可以在XAML2006中使用它.
我们还有以下Stackoverflow问题,其中一些有相互矛盾的答案,而且没有一个明显正确:
最后,我个人使用了x:Reference扩展,它似乎在WPF应用程序中工作,无论MSDN说什么,即使Visual Studio有时会抱怨奇怪的东西(或者它可能是ReSharper),例如标记中的空引用异常.
了解实际问题,