为了更好地理解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控件的一部分时,何时以及如何确定绑定的来源?我的意思是指源对象而不是源的值?有人能指出我所说的某些规范吗?
答案 0 :(得分:2)
我认为Style只是实例化的
是的,这是使用您的代码的证据
我是否只有一个Binding(即一个Binding-Object),而button1和button2正在引用这一个Binding-object?
是的,因为样式保存了绑定并且对象是相同的(字面意思),所以绑定必须是相同的。
如果是这样,当button1和button2被用作不同的My:Control控件的一部分时,何时以及如何确定绑定的来源?
何时:呈现可视树时,通过走到FindAncestor
如何:现在您正在讨论实施细节。虽然我不确切知道FindAncestor
是如何工作的(一种方法是通过.NET Reflector查看),但它可能使用VisualTreeHelper.GetParent(...)
修改强>
BindingExpression
与对象的Binding
无关,但您可以轻松地将其设为这样。
正如预期的那样,两个按钮都有不同的BindingExpression
但是相同的Binding
对象。 BindingExpression
与Target
绑定Source
。在这种情况下,ResolvedSource
因使用RelativeSource
查找属性