附属物业变更事件?

时间:2010-03-17 13:08:53

标签: c# wpf attached-properties

如果附加属性发生变化,有没有办法获得更改通知?

一个简单的例子是Canvas,其中包含RectangleRectange的位置是使用DepenendyProperties Canvas.TopCanvas.Left设置的。我正在使用Adorner通过更改Canvas.TopCanvas.Left来移动矩形。

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

下一步是在两个Rectangles之间创建一个箭头。为了跟踪移动Rectangles,只要Rectangle的位置发生变化,箭头就必须获得更改通知。如果我可以在附加属性Canvas.Top更改时获得更改通知,这将很容易。

感谢您的帮助, 迈克尔

1 个答案:

答案 0 :(得分:17)

为什么不使用绑定?这正是他们为......设计的......

如果出于某种原因,您无法使用绑定,则可以添加处理程序,以便在属性值更改时收到通知:

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)
{
    ...
}