WPF中的样式和绑定

时间:2013-08-16 14:55:55

标签: wpf binding styles

为了更好地理解WPF绑定:

<Style x:Key="myButton" TargetType="Button">
  <Setter 
    Property="Content" 
    Value="{Binding 
             RelativeSource={RelativeSource FindAncestor,AncestorType=My:Control}, 
             Path=Text}">
  </Setter>
</Style>

<Button Name="button1" Style="{StaticResource myButton}"></Button>
<Button Name="button2" Style="{StaticResource myButton}"></Button>

当我在多个按钮上使用此Style时,我认为Style只是实例化的。绑定意味着什么?我只有一个绑定(即一个绑定对象),而button1和button2是否引用了这个绑定对象?如果是这样,当button1和button2被用作不同的My:Control控件的一部分时,何时以及如何确定绑定的来源?我的意思是指源对象而不是源的值?有人能指出我所说的某些规范吗?

1 个答案:

答案 0 :(得分:2)

我认为Style只是实例化的

是的,这是使用您的代码的证据

enter image description here

我是否只有一个Binding(即一个Binding-Object),而button1和button2正在引用这一个Binding-object?

是的,因为样式保存了绑定并且对象是相同的(字面意思),所以绑定必须是相同的。

enter image description here

如果是这样,当button1和button2被用作不同的My:Control控件的一部分时,何时以及如何确定绑定的来源?

何时:呈现可视树时,通过走到FindAncestor

指定的控件来评估绑定

如何:现在您正在讨论实施细节。虽然我不确切知道FindAncestor是如何工作的(一种方法是通过.NET Reflector查看),但它可能使用VisualTreeHelper.GetParent(...)

修改

BindingExpression与对象的Binding无关,但您可以轻松地将其设为这样。

enter image description here

正如预期的那样,两个按钮都有不同的BindingExpression但是相同的Binding对象。 BindingExpressionTarget绑定Source。在这种情况下,ResolvedSource因使用RelativeSource查找属性

而为空

enter image description here