什么是模板绑定和绑定?

20 浏览
0 Comments

什么是模板绑定和绑定?

我无法理解BorderThickness=\"{TemplateBinding BorderThickness}。\n这里是代码:\n


    
        
    

\n另外,请解释其他类型的绑定。

0
0 Comments

在WPF中,每个控件在很大程度上都与其展示分离。您始终可以更改控件的模板,并使其看起来完全不同。例如,一个仅由Rectangle组成的ControlTemplate的按钮可以按预期工作。现在,有时ControlTemplate实际上需要使用控件的逻辑部分的属性。这就是TemplateBinding的作用,它只是告诉ControlTemplate“使用我们正在提供视觉呈现的控件的此属性”。

一个很好的例子是每个控件上的Background属性,它本身没有意义,它通过TemplateBinding将其传递给ControlTemplate中的子控件来获得其含义。

绑定本身在MSDN中有很好的描述。 这个是一个非常好的备忘单,实际上挂在我旁边的墙上。它提供了所有不同绑定的很好的概述。

请参考以下示例代码:


    
        
    
    
        

在上面的示例中,我们创建了一个简单的按钮,并将其背景颜色设置为红色。我们使用了TemplateBinding来将按钮的Background属性传递给ControlTemplate中的Border控件的Background属性。这样,按钮的背景颜色将应用于Border控件。

通过使用TemplateBinding,我们可以在控件的外观模板中使用控件的属性,以实现更多的自定义和灵活性。

0
0 Comments

问题的出现原因是在自定义控件模板时,希望用原始控件的属性值来设置模板中的某些元素的属性。使用Binding可以实现这一目的,但是由于在控件模板中,无法直接使用Binding来引用控件的属性。因此,需要使用TemplateBinding来解决这个问题。

解决方法是在控件模板中使用TemplateBinding来引用控件的属性值。具体步骤如下:

1. 在自定义控件的模板中,找到需要引用控件属性的元素。

2. 使用TemplateBinding来设置该元素的属性,将其绑定到控件的对应属性上。

3. 通过使用TemplateBinding,可以在模板中引用控件的属性,并将其值传递给需要设置的元素。

例如,假设有一个Button控件,它有一个默认的ControlTemplate属性和Height属性。我们想要自定义Button的ControlTemplate,并将其中的一个元素的属性设置为Button的Height属性。可以按照以下步骤来实现:

1. 创建一个新的控件模板,其中包含一个Ellipse元素。

2. 使用TemplateBinding来设置Ellipse的Height属性,将其绑定到Button的Height属性上。

3. 这样,当Button的Height属性发生变化时,Ellipse的Height属性也会相应地更新。

通过使用TemplateBinding,我们可以在控件模板中引用控件的属性,并将其值传递给需要设置的元素。这样,我们就可以实现自定义控件模板时,使用控件的属性来设置模板中元素的属性的需求。

0
0 Comments

模板绑定(TemplateBinding)用于绑定模板定义中的元素属性。在下面的例子中,可以这样写:


这里的意思是将边框的padding属性绑定到...什么呢?你可能想说,“绑定到正在使用此模板的控件的padding属性”。但是,你不能给它一个名称,因为此时你不知道控件的x:Name(即使知道了,也不起作用,因为它在不同的命名范围内)。然而,你可以通过定义相对源(RelativeSource)来实现:


或者使用模板绑定(TemplateBinding),这是上面方法的一种快捷方式:


除了在这些模板化场景中更简洁外,模板绑定(TemplateBinding)与常规绑定相比具有以下几点不同之处:

- 它在编译时进行评估(例如,如果Padding属性不存在,将会得到一个编译错误。但是如果使用带有TemplatedParent的绑定,你只能在运行时看到错误)。

- 它始终是单向绑定。

- 它要求源属性和目标属性都是依赖属性。

- 它的功能较少(没有StringFormat、Delay、IsAsync等等,可以参考Binding和TemplateBindingExtension的属性)。

0