Windows 10上的空白WPF子窗口

我有从Windows 8.1(64位)升级的Windows 10。 在WPF应用程序(由我或其他人开发,如截图上的todotxt.net )大多数时候子窗口是空白的。

如果我将鼠标移到控件上,它们中的一些会出现(我猜是因为它们处理WM_MOUSEHOVER消息来重绘自己)。 有时候窗户是好的(约10-20%的发射)。 我已经通过隐藏和显示控件来暂时解决了这个问题( 请阅读下文 )。

在Hyper-V上全新安装Windows 10不会重现该错误。

有没有人遇到类似的问题? 你怎么解决它?

这里看起来如何(空白的子窗口):

1个选项空白

鼠标移动后:

2个选项,mousemove

我的解决scheme

我无法在互联网上find任何其他解决scheme。 如果您发现任何其他解决scheme,请让我知道。

首先,简单的重新绘制(通过InvalidateVisual() )并不能解决问题。

我决定处理ContentRendered事件并隐藏,然后显示所有的控件。 这个技巧是有效的,但它“ 闻起来 ”。

在下面的代码mainGrid是我的子窗口最顶端的网格的名称:

XAML:

<Window x:Class="MyApp.About" ......... ContentRendered="Window_ContentRendered" ...... > <Grid x:Name="mainGrid" ... > 

CS:

 private void Window_ContentRendered(object sender, EventArgs e) { InvalidateVisual(); // Just in case var childCount = VisualTreeHelper.GetChildrenCount(mainGrid); for (int i = 0; i < childCount; ++i) { var child = VisualTreeHelper.GetChild(mainGrid, i) as UIElement; if (child != null) { child.Visibility = Visibility.Hidden; child.Visibility = Visibility.Visible; } } } 

我现在已经更新了我的视频驱动程序,这似乎解决了这个问题。

Windows现在正确显示,不需要下面列出的附加代码。 🙂

从8.1升级到Windows 10后,我面临同样的问题。我改变了窗口加载方法:

  WindowState = WindowState.Maximized; WindowState = WindowState.Normal; 

这似乎“重绘”窗口元素,以便它们显示。 我已经测试了这几次,每次窗口正确地恢复自己从最大化后正确。 我没有在xaml中设置窗口状态。

(另一个“修补程序”是设置维度绑定,如通过特定名称的宽度到该类型的所有对象)。

从我的观察来看,这只是Windows 10上的英特尔GPU驱动程序问题(Windows 8很好)。 我们有一个WPF桌面应用程序,有成千上万的用户在Windows 7,8,8.1中运行良好,但是当安装在Windows 10中时,一些Windows 10运行良好,但是一些将显示这个线程解释的内容。

要解决此问题,最简单的方法是更新有问题的计算机的英特尔GPU驱动程序。 如果您拼命地发现它并不能帮助即使您运行了最新的Windows更新并且问题仍然存在,请尝试通过以下方式手动更新驱动程序:

  1. 在“设备管理器”中,右键单击显卡,然后选择“更新驱动程序”。
  2. 这样,Windows 10将尝试查找Windows Update中有时不可用的最新驱动程序。
  3. 如果设备管理器告诉您的驱动程序已经是最新的,最后的手段是在这里寻找驱动程序: https : //downloadcenter.intel.com/

对于某些机器,例如Microsoft Surface 3(不是Surface Pro),运行着新的CPU / GPU(Atom X7),更新驱动程序似乎还不可能,而且我仍然在为这类机器寻找解决方案。

在其他情况下,更新到驱动程序版本10.18.15.4278后,我的大部分英特尔高清GPU解决了这个问题

注1:到目前为止,我还没有看到这个问题出现在其他GPU,说Nvidia或ATI。 注2:一般来说,除了最新的英特尔凌动X5 / X7之外,大多数其他英特尔HD Graphic应该能够执行驱动程序更新并解决此问题。