I assume the style is only an instance
Yes, here is the proof that using your code

Do I have only one binding (i.e., one binding-object), and button1 and button2 refer to this one binding object?
Yes, since the style contains a snap, and the objects are the same (literally), the snap should be the same.

If so, when and how is the binding source determined when buttons 1 and 2 are used as part of various My: Control controls?
When: When the visual tree is rendered, bindings are evaluated by navigating to the control specified by FindAncestor
How: Now you are talking about implementation details. Although I donβt know exactly how FindAncestor (one way to see through .NET Reflector) works, it probably uses VisualTreeHelper.GetParent(...)
EDIT:
BindingExpression not bound to a Binding object, but you can easily get it like this.

As expected, both buttons have different BindingExpression , but the same Binding objects. BindingExpression binds Target to Source . In this case, the ResolvedSource is null as a result of using the RelativeSource to find the property

source share