以下TargetType规范之间有什么区别?
1.
<Style TargetType="{x:Type Button}" ...2.
<Style TargetType="Button" ...看起来两者都工作得很好。
发布于 2011-08-30 18:59:36
在第一个示例中,Type标记扩展创建由给定字符串指定的Type实例,即Button。
在第二个示例中,与TargetType属性关联的类型转换器将字符串"Button"转换为所需的Type。
两者给出的结果完全相同。值得注意的是,在Silverlight中,Type标记扩展并不存在,因此(2)是唯一可能的。
发布于 2012-04-19 18:51:44
很抱歉这么老生常谈,但我觉得这是值得的。我最近遇到了一种情况,它表明x:Type与TypeName-as-String不同。从我的经验来看-
x:Type 考虑程序集的强名称或版本,但不考虑Type
我已经在我的博客中解释了我的场景和其他细节-
http://weblogs.asp.net/akjoshi/archive/2012/02/03/importance-of-specifying-ancestortype-with-x-type-in-relativesourcebinding.aspx
除此之外,在WPF推断类型的方式上也存在差异。对于x:使用TypeExtension类型,而对于TypeName-as-String使用FrameworkElementFactory。
根据MSDN -
支持类型名为字符串的
类型属性
WPF支持的技术允许指定类型类型的某些属性的值,而不需要使用x:Type标记扩展。相反,您可以将该值指定为命名该类型的字符串。这方面的例子有ControlTemplate.TargetType和Style.TargetType。类型转换器或标记扩展都不提供对此行为的支持。相反,这是通过FrameworkElementFactory实现的延迟行为。
http://msdn.microsoft.com/en-us/library/ms753322.aspx
https://stackoverflow.com/questions/7242005
复制相似问题