2

一些背景

我正在编写一个应用程序,它在屏幕上移动多个需要实时约束的窗口。我通常使用以下格式设置窗口位置:

this.Left = position.x;
this.Top = position.y;

问题

我想知道这是否是最快或最有效的方法。设置 Left 会自动触发要刷新的事件,还是等待 OnRender 事件?

其次,为什么没有简单地设置位置的功能?或者这甚至是必要的吗?我知道 Windows API 有SetWindowPos,但我更愿意远离非托管代码。使用这个功能会更快吗?

4

1 回答 1

3

我不确定它是否是最有效的,但多次调用它可能会出现性能问题。这样做的原因是因为LeftTop依赖属性有一个PropertyChangedCallback实例设置给OnPositioningChanged方法。此方法调用InvalidateArrange。从链接:

频繁调用 InvalidateArrange 或特别是 UpdateLayout 会对性能产生重大影响。

我知道这是一个显而易见的答案,但最好的方法是对这两种方法进行基准测试,看看哪一种适合你。无论您是走非托管路线还是坚持使用当前方法,我想在某些时候都必须进行相同的渲染调用(很高兴对此进行更正)。

于 2013-09-01T00:27:07.497 回答