6

为了更好地理解 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>

当我在多个按钮上使用此样式时,我假设样式只是实例化的样式。这对绑定意味着什么?我是否只有一个 Binding(即一个 Binding-Object)并且 button1 和 button2 正在引用这一个 Binding-object?如果是这样,当 button1 和 button2 用作不同 My:Control 控件的一部分时,何时以及如何识别绑定的源?我的意思是引用源对象而不是源的值?有人可以向我指出一些说明这一点的规范吗?

4

1 回答 1

2

我假设 Style 只是实例化的

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

在此处输入图像描述

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

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

在此处输入图像描述

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

时间:当呈现可视化树时,通过走到指定的控件来评估绑定FindAncestor

How:现在你在谈论实现细节。虽然我不知道具体是如何FindAncestor工作的(一种查看方式是通过 .NET Reflector),但它可能使用VisualTreeHelper.GetParent(...)

编辑:

the与对象的 theBindingExpression无关Binding,但您可以像这样轻松获得它。

在此处输入图像描述

正如预期的那样,两个按钮都有不同BindingExpression但相同的Binding对象。与的BindingExpression联系。在这种情况下,由于使用来查找属性,因此为 nullTargetSourceResolvedSourceRelativeSource

在此处输入图像描述

于 2013-08-16T17:13:01.317 回答