这两个绑定之间的差异是什么:
<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>
答案 0 :(得分:198)
TemplateBinding并不完全相同。 MSDN文档通常由必须测试单音节SDE的软件功能的人编写,所以细微差别不太正确。
TemplateBindings在编译时根据控件模板中指定的类型进行评估。这允许更快地实例化编译模板。只是在模板绑定中摸索名称,您将看到编译器将标记它。
绑定标记在运行时解析。虽然执行速度较慢,但绑定将解析在模板声明的类型上不可见的属性名称。慢一点,我会指出它的相对类型,因为绑定操作只需要很少的应用程序的cpu。如果你是高速爆破控制模板,你可能会注意到它。
作为练习,尽可能使用TemplateBinding,但不要担心绑定。
答案 1 :(得分:32)
TemplateBinding - 比使用常规绑定更具限制性
常规 Binding - 没有上述限制的TemplateBinding
答案 2 :(得分:19)
还有一件事 - TemplateBindings不允许进行值转换。它们不允许您传递转换器,并且不会自动将int转换为字符串(例如,绑定是正常的)。
答案 3 :(得分:16)
TemplateBinding是使用TemplatedParent绑定的简写,但它不公开Binding类的所有功能,例如,您无法从TemplateBinding控制Binding.Mode。
答案 4 :(得分:3)
RelativeSource TemplatedParent
此模式允许将给定的ControlTemplate属性绑定到应用ControlTemplate的控件的属性。为了更好地理解这个问题,下面是一个例子
<Window.Resources>
<ControlTemplate x:Key="template">
<Canvas>
<Canvas.RenderTransform>
<RotateTransform Angle="20"/>
</Canvas.RenderTransform>
<Ellipse Height="100" Width="150"
Fill="{Binding
RelativeSource={RelativeSource TemplatedParent},
Path=Background}">
</Ellipse>
<ContentPresenter Margin="35"
Content="{Binding RelativeSource={RelativeSource
TemplatedParent},Path=Content}"/>
</Canvas>
</ControlTemplate>
</Window.Resources>
<Canvas Name="Parent0">
<Button Margin="50"
Template="{StaticResource template}" Height="0"
Canvas.Left="0" Canvas.Top="0" Width="0">
<TextBlock FontSize="22">Click me</TextBlock>
</Button>
</Canvas>
如果我想将给定控件的属性应用于其控件模板,那么我可以使用TemplatedParent模式。这个标记扩展也有类似的一个,它是TemplateBinding,它是第一个的简写,但TemplateBinding在编译时以TemplatedParent的对比度进行评估,TemplatedParent在第一个运行时之后进行评估。正如您在下图中所述,背景和内容从按钮内部应用到控件模板。
答案 5 :(得分:1)
我认为TemplateBinding不支持Freezable类型(包括画笔对象)。解决问题。可以使用TemplatedParent
答案 6 :(得分:0)
它们以类似的方式使用,但它们有一些差异。 以下是TemplateBinding文档的链接: http://msdn.microsoft.com/en-us/library/ms742882.aspx