【发布时间】:2011-01-18 01:02:10
【问题描述】:
在我的 WPF 应用程序中,我有可以打开其他 WPF 对话框窗口的 WPF 窗口,我的操作如下:
PickForEveryone PickForEveryoneWindow = new PickForEveryone(sSelRecipe, selMRM.sDay, selMRM.MealTypeID);
PickForEveryoneWindow.Owner = this;
PickForEveryoneWindow.ShowDialog();
PickForEveryone 定义为:
public partial class PickForEveryone : Window
和
<Window x:Class="PFWb0.PickForEveryone"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit"
ShowInTaskbar="False"
Title="Pick Recipe For All" Height="536" Width="441"
WindowStartupLocation="CenterOwner">
并包含一个带有 DataGrid 和几个按钮和复选框的 Grid。
这在我的开发计算机上运行良好。但是,当对话框窗口关闭时,我的客户一直看到对话框窗口的一部分显示在父窗口的顶部留下了视觉垃圾。也就是说,当 ShowDialog() 返回时,只有部分窗口未绘制。
我尝试添加 this.InvalidateVisual();在上面的代码下面,但它并没有解决问题。
我在这里也看到了一个建议(针对另一种 WPF 显示问题)调用 OnRender() 来强制重绘,但是 OnRender 需要一个 DrawingContext 类型的参数,我不知道如何获取。
所以,我想问是否有人知道如何首先解决显示问题,或者如何通过让 WPF 重绘窗口来从中恢复。
更新:正如 cmets 对下面建议的答案所见,我仍然没有适用于我客户计算机的解决方案,而且我的解决方法(让 Windows 相互闪避)已经不够了。唯一有效的方法是最小化和最大化被污染的底层窗口。
【问题讨论】:
-
特定计算机上的图形“错误”很可能是该计算机上显示驱动程序错误的结果。如果问题出在 DirectX 中,则 WPF 可以触发问题,而 Windows 窗体应用程序不会。
-
是的。几年前我在 MSDN 论坛上发现了相关的投诉,但没有人解决。此外,我的客户正在为他的视频适配器运行最新的驱动程序(当然,这并不意味着它没有错误,但这意味着通过更新驱动程序无法轻松修复)。此外,他实际上尝试插入不同的视频卡,它仍然在他的机器上显示该问题。我认为此时可能是 Vista,或者更准确地说,是您所说的 - 一些特定的驱动程序。