wpf - Windows 10 上的空白 WPF 子窗口

标签 wpf windows windows-10

我已从 Windows 8.1(64 位)升级到 Windows 10。在 WPF 应用程序(由我或其他人开发,如屏幕截图上的 todotxt.net)中,子窗口大部分时间都是空白的。

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

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

有人遇到过类似的问题吗?你是怎么解决的?

这是它的样子(空白的子窗口):

1 options-blank

鼠标移动后:

2 options-mousemove

我的解决方案

我无法在 Internet 上找到任何其他解决方案。如果您找到任何其他解决方案,请告诉我。

首先,简单的重绘(通过 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 10 上的英特尔 GPU 驱动程序问题(Windows 8 没问题)。我们有一个拥有数千名用户的 WPF 桌面应用程序,它在 Windows 7、8、8.1 中运行良好,但当安装在 Windows 10 中时,某些 Windows 10 运行良好,但有些将完全按照该线程的解释显示。

要解决此问题,最简单的方法是更新有问题机器的 Intel GPU 驱动程序。如果您绝望地发现即使您运行了最新的 Windows 更新也无济于事,但问题仍然存在,请尝试通过以下方式手动更新驱动程序:

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

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

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

注意 1:我还没有看到这个问题出现在其他 GPU 上,比如 Nvidia 或 ATI。 注2:一般来说,除了最新的Intel Atom X5/X7,其他大部分Intel HD Graphic应该都可以执行驱动程序更新并解决这个问题。

关于wpf - Windows 10 上的空白 WPF 子窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32003868/

相关文章:

c# - 什么是沃森信息/桶?

windows - 仅使用系统调用而不是 Windows dll 制作程序

windows - 如何在 Windows 中监控用户(内) Activity ?

c# - 如何创建带有倾斜边框的文本框和标签?

wpf - WPF à la Clean Code 中的命令行参数和 "global settings"

c# - 单击 CancelBtn 取消更改

Kubernetes Ingress Flask 应用程序

c# - CollectionViewSource 代码隐藏绑定(bind) MVVM 的奇怪行为

适用于 Windows 10 的 Java "os.name"?

windows - Visual Studio 2017 安装程序一直告诉我 "elevation required"?