以下TargetType规范之间有什么区别?
1
<Style TargetType="{x:Type Button}" ...
2
<Style TargetType="Button" ...
看起来两者都很好。
答案 0 :(得分:3)
在第一个示例中,Type
标记扩展名创建了由给定字符串指定的Type
实例,即Button
。
在第二个示例中,与TargetType
属性关联的类型转换器会将字符串"Button"
转换为所需的Type
。
两者都给出完全相同的结果。值得注意的是,在Silverlight中,Type
标记扩展名不存在,因此(2)只有可能。
答案 1 :(得分:1)
很抱歉找到这样一个老线程,但我觉得这是值得的。我最近遇到的情况表明 x:Type
与 TypeName-as-String
不同。根据我的经验 -
x:类型会考虑程序集的强名称或版本,但不会考虑 TypeName-as-String 。
我已经在我的博客中解释了我的情景和其他细节 -
除此之外,WPF推断类型的方式也有所不同。对于 x:Type 使用TypeExtension,而对于 TypeName-as-String 使用FrameworkElementFactory。
根据MSDN -
键入支持Typename-as-String的属性
WPF支持允许指定某些值的技术 类型Type的属性,不需要x:Type标记扩展名 用法。相反,您可以将值指定为命名的字符串 类型。这方面的例子是ControlTemplate.TargetType和 Style.TargetType。不提供对此行为的支持 无论是类型转换器还是标记扩展。相反,这是一个 通过FrameworkElementFactory实现的延迟行为。