TargetType =“controlType”与TargetType =“{x:Type controlType}”之间的差异

时间:2009-07-06 06:56:13

标签: .net wpf xaml targettype

在WPF中,您可以将TargetType设置为该类型的名称,也可以将其设置为{x:Type nameOfType}

有谁知道区别是什么?

3 个答案:

答案 0 :(得分:19)

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

答案 1 :(得分:15)

很抱歉找到这么老的帖子,但我觉得值得。我最近遇到的情况表明x:Type TypeName-as-String不同

根据我的经验 -

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

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

Importance of specifying AncestorType with x:Type in RelativeSourceBinding

除此之外,WPF推断类型的方式也有所不同。使用 x:Type TypeExtension,而使用 TypeName-as-String FrameworkElementFactory

根据MSDN - x:Type Markup Extension

  

键入支持Typename-as-String的属性

     

WPF支持允许指定某些值的技术   Type类型的属性,不需要x:Type标记扩展名   用法。相反,您可以将值指定为命名的字符串   类型。这方面的例子是ControlTemplate.TargetType和   Style.TargetType。不提供对此行为的支持   无论是类型转换器还是标记扩展。相反,这是一个   通过FrameworkElementFactory实施的延期行为。

答案 2 :(得分:0)

除了上面描述的真正差异之外,使用{x:Type NameOfType}显然会在IDE中以不同的方式突出显示,并使其突出并立即发现(而不是常规字符串)。所以这是我个人的偏好。