gpt4 book ai didi

c# - 连续进行多个属性更改,每个都会影响 UIElement 的外观,是否会导致一次或多次重绘?

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:38 25 4
gpt4 key购买 nike

假设我有一个包含子RectangleCanvas。然后,用户通过将左上角向上和向左拉(保持右下角固定)来调整矩形的大小。

Rectangle 的新位置和大小设置如下(准代码):

Canvas.SetLeft(rectangle, newLeft);
Canvas.SetTop(rectangle, newTop);
rectangle.Width += oldLeft - newLeft;
rectangle.Height += oldTop - newTop;

WPF 是否会为这些定位/大小的每个更改执行重绘(即每个属性更改是否会使所涉及的元素无效并自行触发重绘)还是将它们“排队”(“标记为脏”)并执行一次在某个“下一次重绘”(无论何时)?

编辑:由于多个 InvalidateArrange,我很好奇设置 Canvas.Left 和 Canvas.Top 分别代表冗余/低效代码的程度(如果有的话)在这种情况下由 Canvas 完成的调用(与统一的 Canvas.SetTopLeftCanvas.SetRect 方法相比)。这部分是由于 MSDN 文档中的警告,“频繁调用 InvalidateArrange 或特别是 UpdateLayout 会对性能产生重大影响。”

最佳答案

一般来说,一个基本的 WPF 应用程序将有一个线程。这意味着它一次只能做一件事,这也意味着它在从您的代码中读取指令时无法呈现 UI。因此,在它从您的代码中读取所有指令并且程序执行到达当前方法的末尾后,它将进入渲染模式以一次性渲染 UI /em>.

这就是为什么当程序执行正在处理一些尚未使用后​​台线程运行的长时间运行的任务时 UI“挂起”的原因(我在这里不是在谈论您的代码)。在当前方法结束并且程序执行可以返回到 UI 之前,UI 将无响应。

关于c# - 连续进行多个属性更改,每个都会影响 UIElement 的外观,是否会导致一次或多次重绘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19978526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com