在 WPF 中,您可以将 设置TargetType
为类型的名称,也可以将其设置为{x:Type nameOfType}
.
有谁知道有什么区别?
没有。由于属性类型是Type
,XAML 解析器知道尝试将您提供的任何内容转换为Type
. 在其他情况下,属性类型可能不太具体(例如 . Object
),这就是您需要标记扩展的地方,否则 XAML 解析器只会将您的值解释为String
.
我最近遇到了一种情况,表明它x:Type
与.TypeName-as-String
根据我的经验——
x:Type
考虑强名称或程序集的版本,但不考虑TypeName-as-String
.
我已经在我的博客中解释了我的场景和其他细节 -
在 RelativeSourceBinding 中使用 x:Type 指定 AncestorType 的重要性
除此之外,WPF 推断类型的方式也有所不同。使用了for ,而使用了 for 。x:Type
TypeExtension
TypeName-as-String
FrameworkElementFactory
根据 MSDN - x:Type 标记扩展
支持 Typename-as-String 的类型属性
WPF 支持无需使用
x:Type
标记扩展即可指定类型类型的某些属性的值的技术。相反,您可以将值指定为命名类型的字符串。这方面的例子是ControlTemplate.TargetType
和Style.TargetType
。不通过类型转换器或标记扩展提供对这种行为的支持。相反,这是通过FrameworkElementFactory
.
除了上面描述的真正区别之外,使用 {x:Type NameOfType} 显然会在您的 IDE 中以不同的方式突出显示,并使其立即脱颖而出(与常规字符串相反)。所以这是我个人的偏好。