TargetType="controlType"和TargetType="{x:Type controlType}"之间有什么区别?

25
在WPF中,您可以将TargetType设置为类型名称,也可以将其设置为{x:Type nameOfType}。有人知道它们之间的区别吗?
3个回答

20

没有什么特别的。由于属性类型是Type,因此XAML解析器知道尝试将您提供的任何内容转换为Type。在其他情况下,属性类型可能不太具体(例如Object),这时您需要使用标记扩展,否则XAML解析器只会将您的值解释为String


16

我最近遇到了一种情况,表明x:TypeTypeName-as-String不同。

从我的经验来看-

x:Type考虑程序集的强名称或版本,而不考虑TypeName-as-String

我在我的博客中解释了我的情况和其他细节-

指定x:Type中AncestorType的重要性

除此之外,WPF还存在类型推断方面的差异。 x:Type使用TypeExtension,而TypeName-as-String使用FrameworkElementFactory

根据MSDN - x:Type标记扩展

支持Typename-as-String的类型属性

WPF支持启用某些类型为Type的属性的值的技术,而无需使用x:Type标记扩展。相反,您可以将值指定为命名类型的字符串。这些的例子是ControlTemplate.TargetTypeStyle.TargetType。不通过类型转换器或标记扩展来提供对此行为的支持。相反,这是通过FrameworkElementFactory实现的延期行为。


1
除了上面描述的实际区别外,显然使用{x:Type NameOfType}会在您的IDE中以不同的方式突出显示,并使其立即突出显示(与常规字符串相反)。因此,这是我的个人偏好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接