什么是模板绑定与绑定?

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还有一些不同之处:

  • 它在编译时进行评估.(例如,如果Padding属性不存在,则会出现编译错误.但是如果要使用TemplatedParent的绑定,则只能在运行时看到错误.)
  • 它始终是单向绑定.
  • 它要求源属性和目标属性都是依赖属性.
  • 它的功能要少得多(没有StringFormat,Delay,IsAsync等等.请参阅BindingTemplateBindingExtention的属性).


Bad*_*Bad 49

一张图片胜过1000字.在这种情况下,它是7分钟视频:https://www.youtube.com/watch?v = z-0TZR-7xLI

编辑: 示例:

  • A Button具有默认ControlTemplate属性和Height属性
  • 你重写ControlTemplate的属性Button通过编写自己的(例如你想的Ellipse-looking按钮而不是Rectangle-looking)
  • Ellipse新的内容之后ControlTemplate,您希望它Ellipse与原始Button的Height属性大小相同
  • 因此,你使用TemplateBinding,以引用ButtonHeight不点名它在此输入图像描述

  • 这张照片非常有帮助。谢谢你! (2认同)

dow*_*for 32

ErenErsönmenz已经很好地解释了它,但我想给它另一个视角来更好地理解这个概念.

在WPF中,每个控件都或多或少地与其表示分离.您始终可以更改控件的模板,使其看起来完全不同.按钮按预期工作,ControlTemplate仅包含一个Rectangle例如.现在有时需要ControlTemplate实际使用控件的逻辑部分的属性.这就是为什么TemplateBinding它只是告诉ControlTemplate"使用我们提供视觉呈现的控件的这个属性".一个很好的例子是Background每个控件上的属性,它本身没有任何意义,它通过TemplateBinding它来控制其中的子控制ControlTemplate.

MSDN中描述了绑定本身非常好.是一张非常好的备忘单,实际上挂在我旁边的墙上.它可以很好地概述所有可用的不同绑定.


Zab*_*sky 6

TemplateBinding Markup Extension,TemplateBinding将控件模板中的属性值链接到模板化控件上的某些其他公开属性的值.换句话说,它是用于绑定模板中的值.

绑定连接绑定目标和数据源的属性.