如果附加属性发生变化,有没有办法获得更改通知?
一个简单的例子是Canvas
,其中包含Rectangle
。 Rectange
的位置是使用DepenendyProperties Canvas.Top
和Canvas.Left
设置的。我正在使用Adorner通过更改Canvas.Top
和Canvas.Left
来移动矩形。
<Canvas Width="500" Height="500" >
<Rectangle Width="40" Height="40" Canvas.Left="10" Canvas.Top="20" />
</Canvas>
下一步是在两个Rectangles
之间创建一个箭头。为了跟踪移动Rectangles
,只要Rectangle
的位置发生变化,箭头就必须获得更改通知。如果我可以在附加属性Canvas.Top
更改时获得更改通知,这将很容易。
感谢您的帮助, 迈克尔
答案 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)
{
...
}