25

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

有谁知道有什么区别?

4

3 回答 3

20

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

于 2009-07-06T07:20:24.360 回答
15

我最近遇到了一种情况,表明它x:Type .TypeName-as-String

根据我的经验——

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

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

在 RelativeSourceBinding 中使用 x:Type 指定 AncestorType 的重要性

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

根据 MSDN - x:Type 标记扩展

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

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

于 2012-02-03T12:07:09.927 回答
0

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

于 2018-05-30T10:14:15.753 回答