在我的 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 重绘窗口来从中恢复。
更新:正如下面对建议答案的评论中所见,我仍然没有适用于我客户计算机的解决方案,而且我的解决方法(让窗口相互躲避)已经不够了。唯一有效的是最小化和最大化污染的底层窗口。