【发布时间】:2010-11-08 07:33:51
【问题描述】:
在 WPF 中,您可以将 TargetType 设置为类型的名称,也可以将其设置为 {x:Type nameOfType}。
有人知道有什么区别吗?
【问题讨论】:
标签: .net wpf xaml targettype
在 WPF 中,您可以将 TargetType 设置为类型的名称,也可以将其设置为 {x:Type nameOfType}。
有人知道有什么区别吗?
【问题讨论】:
标签: .net wpf xaml targettype
我最近遇到一个情况,表明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实现的延迟行为。
【讨论】:
除了上面描述的真正区别之外,使用 {x:Type NameOfType} 显然会在您的 IDE 中以不同的方式突出显示,并使其立即脱颖而出(与常规字符串相反)。所以这是我个人的喜好。
【讨论】:
什么都没有。由于属性类型是Type,XAML 解析器知道尝试将您提供的任何内容转换为Type。在其他情况下,属性类型可能不太具体(例如Object),这就是您需要标记扩展的地方,否则 XAML 解析器只会将您的值解释为 String。
【讨论】: