zoukankan      html  css  js  c++  java
  • [WPF系列-高级TemplateBinding vs RelativeSource TemplatedParent]

    What is the difference between these 2 bindings:

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

    and

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

    TemplateBinding - More limiting than using regular Binding

    • More efficient than a Binding but it has less functionality
    • Only works inside a ControlTemplate's visual tree
    • Doesn't work with properties on Freezables
    • Doesn't work within a ControlTemplate's Trigger
    • Provides a shortcut in setting properties(not as verbose),e.g. {TemplateBinding targetProperty}

    Regular Binding - Does not have above limitations of TemplateBinding

    • Respects Parent Properties
    • Resets Target Values to clear out any explicitly set values
    • Example: <Ellipse Fill="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Background}"/>

    One more thing - TemplateBindings don't allow value converting. They don't allow you to pass a Converter and don't automatically convert int to string for example (which is normal for a Binding).

    TempleteBinding is a shorthand for Binding with TemplatedParent but it does not expose all the capabilities of the Binding class, for example you can't control Binding.Mode from TempleteBinding.

    参考

    WPF TemplateBinding vs RelativeSource TemplatedParent

  • 相关阅读:
    谨以此文纪念一周的心血历程
    面向对象初调用:foolish 电梯
    洛谷 1016 旅行家的预算
    洛谷 1514 引水入城
    洛谷 3178 树上操作
    洛谷 3811 【模板】乘法逆元
    洛谷 1156 垃圾陷阱
    洛谷 1363 幻想迷宫
    洛谷 1736 创意吃鱼法
    洛谷 1436 棋盘分割
  • 原文地址:https://www.cnblogs.com/HQFZ/p/4169874.html
Copyright © 2011-2022 走看看