【问题标题】:Difference between TargetType="controlType" and TargetType="{x:Type controlType}"TargetType="controlType" 和 TargetType="{x:Type controlType}" 的区别
【发布时间】:2010-11-08 07:33:51
【问题描述】:

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

有人知道有什么区别吗?

【问题讨论】:

    标签: .net wpf xaml targettype


    【解决方案1】:

    我最近遇到一个情况,表明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 实现的延迟行为。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2017-07-21
          • 2011-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-04
          • 2011-04-07
          相关资源
          最近更新 更多