说我有一个Canvas
包含一个孩子Rectangle
。然后用户通过将左上角向上和向左拉来调整矩形的大小(使右下角保持锚定)。
Rectangle 的新位置和大小设置如下(准代码):
Canvas.SetLeft(rectangle, newLeft);
Canvas.SetTop(rectangle, newTop);
rectangle.Width += oldLeft - newLeft;
rectangle.Height += oldTop - newTop;
WPF 将针对位置/大小的这些更改中的每一个执行重绘(即,每个属性更改是否会使所涉及的元素无效并自行触发重绘)还是将它们“排队”(“标记为脏”)并一次全部执行在一些“下一次重绘”(无论何时)?
编辑:我很好奇设置 Canvas.Left 和 Canvas.Top 在多大程度上(如果有)分别代表冗余/低效代码,因为在这种情况下InvalidateArrange
完成了多次调用Canvas
(与统一的 Canvas.SetTopLeft 相比)或Canvas.SetRect方法)。这部分是由于 MSDN 文档中的警告“频繁调用 InvalidateArrange 或特别是 UpdateLayout 会对性能产生重大影响”。