在 WPF 中通过设置 WindowStyle 为 None 以及 WindowState 为 Maximized 进入全屏,同时设置 AllowsTransparency 支持透明,此时弹出一个设置 WindowStyle 是 None 的子窗口,用 VisualStudio 2019 运行将会看到 子窗口 先显示出来,然后回到主窗口下面,然后再显示到主窗口上面
其实此问题我没有复现
此问题步骤十分简单,但是有要求是在 VisualStudio 2019 附加的基础上,如果单独运行预计没有此问题。此问题在 .NET Framework 4.5-4.8 以及 .NET Core 3.1 都复现
步骤:
- 给 MainWindows 如下设置
WindowStyle="None" AllowsTransparency="True"
WindowState="Maximized"
- 给主窗口添加一个按钮
<Button Content="Show sub window" HorizontalAlignment="Center" VerticalAlignment="Center" Click="Button_OnClick"/>
- 点击按钮显示一个子窗口
private void Button_OnClick(object sender, RoutedEventArgs e)
{
var window = new Window()
{
};
window.Show();
}
通过 VisualStudio 2019 运行项目,可以看到在点击按钮的时候,先显示了子窗口然后子窗口到主窗口下方,等一下又回到主窗口上方。也就是子窗口显示一下然后不显示,可以看到出现闪烁
注意,此时如果没有在 VisualStudio 2019 附加调试,那么不会看到子窗口闪烁
解决方法有两个
第一个方法是去掉主窗口的 AllowsTransparency 属性
第二个方法是设置子窗口的 Owner 为主窗口
private void Button_OnClick(object sender, RoutedEventArgs e)
{
var window = new Window()
{
Owner = this
};
window.Show();
}
本文代码放在 github 欢迎小伙伴访问
本文会经常更新,请阅读原文: https://dotnet-campus.github.io//post/WPF-%E5%B7%B2%E7%9F%A5%E9%97%AE%E9%A2%98-%E5%85%A8%E5%B1%8F%E9%80%8F%E6%98%8E%E7%AA%97%E5%8F%A3%E5%BC%B9%E5%87%BA%E5%AD%90%E7%AA%97%E5%8F%A3%E4%BC%9A%E9%97%AA%E7%83%81.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 lindexi (包含链接: https://dotnet-campus.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。