首页 > 代码库 > [WPF系列-高级TemplateBinding vs RelativeSource TemplatedParent]
[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
[WPF系列-高级TemplateBinding vs RelativeSource TemplatedParent]
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。