Attached Property Changed Event?

Michael Menne picture Michael Menne · Mar 17, 2010 · Viewed 9.6k times · Source

ist there a way to get a change notification if an attached property changed?

A simple example is a Canvas with a Rectangle in it. The position of the Rectange is set by using the DepenendyProperties Canvas.Top and Canvas.Left. I'm using an Adorner to move the Rectangle around by changing the Canvas.Top and Canvas.Left.

<Canvas Width="500" Height="500" >
   <Rectangle Width="40" Height="40" Canvas.Left="10" Canvas.Top="20" />
</Canvas>

The next step is to create an Arrow between two Rectangles. In order to keep track of the moving Rectangles the Arrow must get a change notification whenever the position of a Rectanglechanges. This would be easy if I could just get a changed notification when the Attached Property Canvas.Topchanges.

Thanks for any help, Michael

Answer

Thomas Levesque picture Thomas Levesque · Mar 17, 2010

Why don't you use a binding ? That's precisely what they're designed for...

If, for some reason, you can't use a binding, you can add a handler to be notified when the value of the property changes :

var topDescriptor = DependencyPropertyDescriptor.FromProperty(Canvas.TopProperty, typeof(Rectangle));
var leftDescriptor = DependencyPropertyDescriptor.FromProperty(Canvas.LeftProperty, typeof(Rectangle));
topDescriptor.AddValueChanged(rectangle, rectangle_PositionChanged);
leftDescriptor.AddValueChanged(rectangle, rectangle_PositionChanged);

...

private void rectangle_PositionChanged(object sender, EventArgs e)
{
    ...
}