【问题标题】:Style TargetType property questionStyle TargetType 属性问题
【发布时间】:2011-08-30 10:46:54
【问题描述】:

以下 TargetType 规范有什么区别?

1.

<Style TargetType="{x:Type Button}" ...

2.

<Style TargetType="Button" ...

似乎两者都可以正常工作。

【问题讨论】:

标签: .net wpf xaml styles


【解决方案1】:

在第一个示例中,Type 标记扩展创建了一个由给定字符串指定的Type 实例,即Button

在第二个示例中,与TargetType 属性关联的类型转换器将字符串"Button" 转换为所需的Type

两者的结果完全相同。值得注意的是,在 Silverlight 中,Type 标记扩展不存在,因此只有 (2) 是可能的。

【讨论】:

    【解决方案2】:

    很抱歉戳了这么一个老帖子,但我觉得这是值得的。我最近遇到一个情况,显示 x:TypeTypeName-as-String 不同。根据我的经验-

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

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

    http://weblogs.asp.net/akjoshi/archive/2012/02/03/importance-of-specifying-ancestortype-with-x-type-in-relativesourcebinding.aspx

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

    根据 MSDN -

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

    WPF 支持能够指定某些值的技术 Type 类型的属性,无需 x:Type 标记扩展 用法。相反,您可以将值指定为命名 类型。这方面的例子是 ControlTemplate.TargetType 和 样式.目标类型。不通过以下方式提供对此行为的支持 类型转换器或标记扩展。相反,这是一个 通过 FrameworkElementFactory 实现的延迟行为。

    http://msdn.microsoft.com/en-us/library/ms753322.aspx

    【讨论】:

      猜你喜欢
      • 2011-05-15
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      相关资源
      最近更新 更多