c# - 附加属性更改事件?

标签 c# wpf attached-properties

<分区>

有没有办法在附加属性发生变化时获得变化通知?

一个简单的例子是一个Canvas,里面有一个RectangleRectange 的位置是使用 DepenendyProperties Canvas.TopCanvas.Left 设置的。我使用装饰器通过更改 Canvas.TopCanvas.Left 来移动矩形。

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

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

感谢您的帮助, 迈克尔

最佳答案

为什么不使用绑定(bind)?这正是它们的设计目的...

如果由于某种原因,您不能使用绑定(bind),您可以添加一个处理程序,以便在属性值更改时得到通知:

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

关于c# - 附加属性更改事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2462387/

相关文章:

c# - linq谓词从集合中删除对象问题

c# - Log4net - 使用继承时的最佳策略

.net - 绑定(bind)值为空时出现 WPF 日期选择器验证错误

c# - 在 WPF 中捕获鼠标

c# - 无法将属性 'False' 中的字符串 'X' 转换为类型 'System.Boolean' 的对象

c# - 检查文件中是否存在字符串

c# - 二元运算符 Multiply 没有为类型 'System.Int32' 和 'System.Double' 定义。

wpf - Treeview MVVM ObservableCollection 更新

wpf - 在样式 setter 中设置自定义附加属性

c# - 将属性附加到用户控件并在设计时更新它