我有从Windows 8.1(64位)升级的Windows 10。 在WPF应用程序(由我或其他人开发,如截图上的todotxt.net )大多数时候子窗口是空白的。
如果我将鼠标移到控件上,它们中的一些会出现(我猜是因为它们处理WM_MOUSEHOVER消息来重绘自己)。 有时候窗户是好的(约10-20%的发射)。 我已经通过隐藏和显示控件来暂时解决了这个问题( 请阅读下文 )。
在Hyper-V上全新安装Windows 10不会重现该错误。
有没有人遇到类似的问题? 你怎么解决它?
这里看起来如何(空白的子窗口):
鼠标移动后:
我的解决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; } } }
我现在已经更新了我的视频驱动程序,这似乎解决了这个问题。
从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更新并且问题仍然存在,请尝试通过以下方式手动更新驱动程序:
对于某些机器,例如Microsoft Surface 3(不是Surface Pro),运行着新的CPU / GPU(Atom X7),更新驱动程序似乎还不可能,而且我仍然在为这类机器寻找解决方案。
在其他情况下,更新到驱动程序版本10.18.15.4278后,我的大部分英特尔高清GPU解决了这个问题
注1:到目前为止,我还没有看到这个问题出现在其他GPU,说Nvidia或ATI。 注2:一般来说,除了最新的英特尔凌动X5 / X7之外,大多数其他英特尔HD Graphic应该能够执行驱动程序更新并解决此问题。