WPF中的样式和绑定

use*_*735 6 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>
Run Code Online (Sandbox Code Playgroud)

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

Sho*_*hoe 2

我假设样式只是实例化的样式

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

在此输入图像描述

我是否只有一个 Binding(即一个 Binding-Object)并且 Button1 和 Button2 引用了这个 Binding-object?

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

在此输入图像描述

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

何时:渲染可视化树时,通过走到由 指定的控件来评估绑定FindAncestor

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

编辑:

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

在此输入图像描述

正如预期的那样,两个按钮具有不同BindingExpression但相同的Binding对象。与BindingExpression的关系。在本例中,由于使用查找属性而导致结果为 nullTargetSourceResolvedSourceRelativeSource

在此输入图像描述