在WPF中,您可以将TargetType
设置为该类型的名称,也可以将其设置为{x:Type nameOfType}
。
有谁知道区别是什么?
答案 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中以不同的方式突出显示,并使其突出并立即发现(而不是常规字符串)。所以这是我个人的偏好。