窗口位置设置为屏幕中间,有时会先在屏幕左上角闪一下窗口,再显示到屏幕中间;后续再重复运行时则不会有这个问题。
窗口位置设置为自定义位置并输入屏幕坐标,则会正常出现在对应的位置,不会闪一下。
XAML设置Visibility="Hidden",每次启动时,会闪一下窗口再隐藏。
对此我的处理方式是自定义位置设为-1000,-1000,由于是在屏幕外,所以即使闪了也看不到。
但是,为啥?
我对这个问题也有点模糊。
很多时候设置窗口位置是在OnLoad事件里的,感觉有时候会先显示出来再调整位置。 这可能和第一次启动的时候预编译有关系,会慢一点。
----
下面是AI的说法:
你碰到的“先闪到左上角再居中/隐藏”的现象,本质上是窗口在第一次绘制前还没来得及完成定位: WPF 默认会先让窗口有个临时位置(常见是 0,0),随后根据 WindowStartupLocation、SizeToContent、布局测量结果等再调整位置/尺寸。冷启动(首次运行、JIT、加载资源)时布局更慢,于是你就看到“闪一下”。再次运行因热缓存快很多,就不明显了。把窗口先放到屏幕外当然能“遮丑”,但有副作用(多显示器/DPI 时可能仍会露出边缘、任务栏缩略图闪烁等)。
WindowStartupLocation
SizeToContent
感谢解答,那看来如果要真的处理这种情况,只能先设置位置在屏幕外并且hidden,窗口绘制完成后再定位到屏幕中间,最后再设置Visible,从而达成保留动效在屏幕中间弹出窗口的效果,不然只能心理上克服克服了。
还有一个方式是先设置透明度为全透明,然后加载完成后再设置成不透明。
哇谢谢,这个更简单合理,我习惯性地认为修改透明度丢失动效了。