В моем приложении 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 и несколько кнопок и флажков.
Который отлично работает на моих компьютерах для разработки. Однако мой клиент продолжает видеть, что диалоговые окна оставляют часть своего отображения в виде визуального мусора поверх родительского окна, когда диалоговое окно закрывается. То есть только часть окна отрисовывается, когда ShowDialog() возвращается.
Я попытался добавить this.InvalidateVisual(); ниже приведенного выше кода, но это не решило проблему.
Я также видел здесь предложение (для другой проблемы отображения WPF) вызвать OnRender() для принудительной перерисовки, но OnRender требует параметр типа DrawingContext, который я не знаю, как получить.
Итак, я спрашиваю, знает ли кто-нибудь, как решить проблему с отображением в первую очередь или как восстановить ее, заставив WPF перерисовать окно.
Обновление: как видно из комментариев к предлагаемым ответам ниже, у меня до сих пор нет решения, которое работает на компьютерах моих клиентов, и моего обходного пути (когда окна уклоняются друг от друга) уже недостаточно. Единственное, что работает, — это минимизировать и максимизировать загрязненное основное окно.