WPF TemplateBinding vs RelativeSource TemplatedParent

这两个绑定有什么区别

<ControlTemplate TargetType="{x:Type Button}">
   <Border BorderBrush="{TemplateBinding Property=Background}">
      <ContentPresenter />
   </Border>
</ControlTemplate>

<ControlTemplate TargetType="{x:Type Button}">
   <Border BorderBrush="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}">
      <ContentPresenter />
   </Border>
</ControlTemplate>


TemplateBinding是不完全相同的事情。 MSDN文档通常由必须测试软件功能的单音节SDE的人编写,因此细微差别不太正确。

TemplateBindings在编译时根据控件模板中指定的类型进行评估。 这允许编译模板更快地实例化。 只需在模板绑定中摸索名称,就会看到编译器会标记它。

绑定标记在运行时解析。 虽然执行速度较慢,但​​该绑定将解析在模板声明的类型上不可见的属性名称。 由于速度较慢,我将指出它的相对性,因为绑定操作只占应用程序CPU的很少部分。 如果你正在高速爆炸控制模板,你可能会注意到它。

作为练习,尽可能使用TemplateBinding,但不要担心绑定。


TemplateBinding - 比使用常规绑定更有限制

  • 比绑定更高效,但功能更少
  • 只在ControlTemplate的可视化树内工作
  • 不适用于Freezables上的属性
  • 在ControlTemplate的触发器中不起作用
  • 提供设置属性的快捷方式(不如详细),例如{TemplateBinding targetProperty}
  • 常规绑定 - 不具有TemplateBinding的上述限制

  • 尊重父项属性
  • 重置目标值以清除任何显式设置的值
  • 示例:<Ellipse Fill =“{Binding RelativeSource = {RelativeSource TemplatedParent},Path = Background}”/>

  • 还有一件事 - TemplateBindings不允许值转换。 他们不允许你传递一个转换器,并且不会自动将int转换为字符串,例如(这对Binding来说是正常的)。

    链接地址: http://www.djcxy.com/p/34471.html

    上一篇: WPF TemplateBinding vs RelativeSource TemplatedParent

    下一篇: How to bind RadioButtons to an enum?