设置窗口位置

时间:2013-03-27 02:10:04

标签: c# wpf

一些背景

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

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

问题

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

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

1 个答案:

答案 0 :(得分:3)

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

  

频繁调用InvalidateArrange或特别是UpdateLayout   会产生重大的性能后果。

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