prj*_*dhi 111 wpf mvvm-light
我无法理解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>
Run Code Online (Sandbox Code Playgroud)
另请解释其他类型的绑定.
Ere*_*mez 187
TemplateBinding用于绑定模板定义中的元素属性.在你的例子中,你可以写
<Border Padding="{Binding Padding}" ...>
Run Code Online (Sandbox Code Playgroud)
意思是将边框的padding属性绑定到...的padding属性?您想说,"填充此模板正在使用的控件的属性." 你不能给它一个名字因为你不知道x:此时控件的名称(即使你这样做了,它也行不通,因为它在不同的名称范围内).但是,您可以通过定义相对源来完成此操作
<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>
Run Code Online (Sandbox Code Playgroud)
或者使用TemplateBinding,它是上面的快捷方式(*)
<Border Padding="{TemplateBinding Padding}" ...>
Run Code Online (Sandbox Code Playgroud)
(*)除了在这些模板场景中不那么冗长之外,与常规绑定相比,TemplateBinding还有一些不同之处:
Bad*_*Bad 49
一张图片胜过1000字.在这种情况下,它是7分钟视频:https://www.youtube.com/watch?v = z-0TZR-7xLI
编辑: 示例:
Button具有默认ControlTemplate属性和Height属性ControlTemplate的属性Button通过编写自己的(例如你想的Ellipse-looking按钮而不是Rectangle-looking)Ellipse新的内容之后ControlTemplate,您希望它Ellipse与原始Button的Height属性大小相同TemplateBinding,以引用Button的Height不点名它
dow*_*for 32
ErenErsönmenz已经很好地解释了它,但我想给它另一个视角来更好地理解这个概念.
在WPF中,每个控件都或多或少地与其表示分离.您始终可以更改控件的模板,使其看起来完全不同.按钮按预期工作,ControlTemplate仅包含一个Rectangle例如.现在有时需要ControlTemplate实际使用控件的逻辑部分的属性.这就是为什么TemplateBinding它只是告诉ControlTemplate"使用我们提供视觉呈现的控件的这个属性".一个很好的例子是Background每个控件上的属性,它本身没有任何意义,它通过TemplateBinding它来控制其中的子控制ControlTemplate.
MSDN中描述了绑定本身非常好.这是一张非常好的备忘单,实际上挂在我旁边的墙上.它可以很好地概述所有可用的不同绑定.
从TemplateBinding Markup Extension,TemplateBinding将控件模板中的属性值链接到模板化控件上的某些其他公开属性的值.换句话说,它是用于绑定模板中的值.
绑定连接绑定目标和数据源的属性.