前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WPF 已知问题 全屏透明窗口弹出子窗口会闪烁

WPF 已知问题 全屏透明窗口弹出子窗口会闪烁

作者头像
林德熙
发布2020-03-23 16:13:30
4K0
发布2020-03-23 16:13:30
举报
文章被收录于专栏:林德熙的博客林德熙的博客

在 WPF 中通过设置 WindowStyle 为 None 以及 WindowState 为 Maximized 进入全屏,同时设置 AllowsTransparency 支持透明,此时弹出一个设置 WindowStyle 是 None 的子窗口,用 VisualStudio 2019 运行将会看到 子窗口 先显示出来,然后回到主窗口下面,然后再显示到主窗口上面

其实此问题我没有复现

此问题步骤十分简单,但是有要求是在 VisualStudio 2019 附加的基础上,如果单独运行预计没有此问题。此问题在 .NET Framework 4.5-4.8 以及 .NET Core 3.1 都复现

步骤:

  1. 给 MainWindows 如下设置
代码语言:javascript
复制
WindowStyle="None" AllowsTransparency="True"
        WindowState="Maximized" 
  1. 给主窗口添加一个按钮
代码语言:javascript
复制
        <Button Content="Show sub window" HorizontalAlignment="Center" VerticalAlignment="Center" Click="Button_OnClick"/>
  1. 点击按钮显示一个子窗口
代码语言:javascript
复制
        private void Button_OnClick(object sender, RoutedEventArgs e)
        {
            var window = new Window()
            {
            };

            window.Show();
        }

通过 VisualStudio 2019 运行项目,可以看到在点击按钮的时候,先显示了子窗口然后子窗口到主窗口下方,等一下又回到主窗口上方。也就是子窗口显示一下然后不显示,可以看到出现闪烁

注意,此时如果没有在 VisualStudio 2019 附加调试,那么不会看到子窗口闪烁

解决方法有两个

第一个方法是去掉主窗口的 AllowsTransparency 属性

第二个方法是设置子窗口的 Owner 为主窗口

代码语言:javascript
复制
        private void Button_OnClick(object sender, RoutedEventArgs e)
        {
            var window = new Window()
            {
                Owner = this
            };

            window.Show();
        }

本文代码放在 github 欢迎小伙伴访问

此问题已经报告微软,请看 The Child window displayed behind the main window, and then the child window is displayed again in front of the main window · Issue #2761 · dotnet/wpf

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档