我无法理解BorderThickness="{TemplateBinding BorderThickness}
。
代码如下:
<ControlTemplate TargetType="{x:Type wpftoolkit:DataGridCell}">
<Border Padding="{TemplateBinding Padding}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
SnapsToDevicePixels="True">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</ControlTemplate>
另外请解释其他类型的绑定。
答案 0 :(得分:181)
TemplateBinding用于绑定模板定义中的元素属性。在您的示例中,您可以编写
<Border Padding="{Binding Padding}" ...>
意思是将边框的padding属性绑定到... 的padding属性?你想说,“这个模板用于控件的padding属性。”你不能给它一个名字,因为你不知道x:此时控件的名称(即使你这样做了,它也行不通,因为它在不同的名称范围内)。但是,您可以通过定义相对源
来完成此操作<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>
或使用TemplateBinding,它是上面
的快捷方式(*)<Border Padding="{TemplateBinding Padding}" ...>
(*)除了在这些模板场景中不那么冗长之外,与常规绑定相比,TemplateBinding有一些不同之处:
答案 1 :(得分:46)
一张图片胜过1000字。在这种情况下,视频为7分钟:https://www.youtube.com/watch?v=z-0TZR-7xLI
修改强> 例如:
答案 2 :(得分:32)
在WPF中,每个控件都或多或少地与其表示分离。您始终可以更改控件的模板,使其看起来完全不同。按钮按预期工作,ControlTemplate
仅包含Rectangle
。现在,ControlTemplate
有时需要实际使用控件逻辑部分的属性。那就是TemplateBinding
对它来说只是告诉ControlTemplate
“使用我们提供视觉呈现的控件的这个属性”。
一个很好的例子是每个控件上的Background
属性,它本身没有任何意义,它通过TemplateBinding
在ControlTemplate
中的子控件中得到它的含义。
MSDN中描述了绑定本身非常好。 This是一张非常好的备忘单,实际上挂在我旁边的墙上。它可以很好地概述所有可用的绑定。
答案 3 :(得分:6)
从TemplateBinding Markup Extension,TemplateBinding
将控件模板中属性的值链接到模板化控件上的某些其他公开属性的值。换句话说,它是用于模板中的绑定值。
Binding连接绑定目标和数据源的属性。