Attached Property Changed Event? [duplicate]
Asked Answered
J

1

9

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

Juvenescent answered 17/3, 2010 at 13:8 Comment(2)
#2193112Buhler
Thanks for this link. Totally missed that one.Juvenescent
E
18

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)
{
    ...
}
Encephalo answered 17/3, 2010 at 13:28 Comment(1)
You should avoid using DependencyPropertyDescriptor for change notification, as they lead to memory leaks if not cleaned. Read up on here for details. However, I'm trying to find out why it is not working for me on attached properties (as this question relates to). But this tip should at least provide some info to others who bump into similar situations.Fancie

© 2022 - 2024 — McMap. All rights reserved.