2013-03-27 139 views
1

某些背景

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

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

问题

我想知道的是,如果这是最快的,或最有效的方式来做到这一点。设置左侧会自动触发一个要刷新的事件,还是等待OnRender事件?

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

回答

3

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

经常调用InvalidateArrange或特别是UpdateLayout 会产生显着的性能影响。

我知道这是一个明显的答案,但最好的方法是对这两种方法进行基准测试并查看哪一种方法适合您。无论你是否使用非托管路线,或者坚持使用你现在使用的方法,我想都会在某个时候提出相同的渲染调用(很高兴能够纠正)。