Как правило, в формах Windows вызов .Invalidate () для элемента управления заставит его перерисовать себя (установив для прямоугольника проверки всего элемента управления значение «грязный», а затем разрешив ему асинхронно вызывать собственное событие рисования. - Если вы простовызовите метод Paint в winforms без Сначала сделав недействительной, вы сможете перерисовать только ту часть, которая ранее была помечена как грязная - поскольку окна используют подход Dirty Rectangles для сохранения при перерисовкевремя.)
Надеемся, что вы можете либо вызвать .Invalidate () на вашем элементе управления WPF, либо просто вызвать .Invalidate () в самой форме (например, "this.Invalidate ();")
Включение двойной буферизации в вашей форме также может помочь, но я не уверен в этом - хотя стоит эксперимента.
@ Хасан выше дал вам часть ответа - как подключиться к насосу сообщений Windowsкоторый и получает уведомления о событиях питания Windows - но сам по себе не приведет к перекрашиванию вашего окна (по крайней мере, из того, что я могурасскажите) - это скорее уведомление, которое гласит: «Эй, у тебя проблема, которую ты ненавидишь.Отстой, чтобы быть вами. "
Так что это, вероятно, так же просто, как подключиться к насосу сообщений Хасана и затем вызвать" this.Invalidate (); "всякий раз, когда получено уведомление о событии питания. Хотя это решение может бытьнемного излишним.
Если этого недостаточно, вам, возможно, придется сообщить самому элементу управления WPF Invalidate ... что он не может сделать, потому что у него нет этого метода. Документация предлагает это.InvalidateVisual () является эквивалентом, но мой опыт заставил меня поверить в обратное. За исключением признания недействительными на уровне winform, я не могу вам помочь. Если вы найдете ответ, пожалуйста, опубликуйте его!