Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Attached Property Changed Event? [duplicate]

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

like image 618
Michael Menne Avatar asked Mar 17 '10 13:03

Michael Menne


1 Answers

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)
{
    ...
}
like image 129
Thomas Levesque Avatar answered Nov 05 '22 05:11

Thomas Levesque