Есть ли способ уменьшить или предотвратить мерцание формы при использовании WPF?

На самом деле у меня есть 2 разных мерцающих проблем:

(1) Когда я создаю форму со стилем границы, равным none, каждый раз, когда я изменяю размер окна, по краям формы появляется большое мерцание. Это особенно заметно, если я пытаюсь изменить размер формы в левом верхнем углу.

(2) Когда я минимизирую форму и восстанавливаю ее из панели задач, в течение (очень) короткой секунды в верхнем левом углу, где обычно располагается заголовок, вы можете увидеть мерцание прямоугольной формы. Я думаю, что это может быть нормальное поведение окон, но оно стало более заметным из-за того, что WPF удаляет окна для минимизации / максимизации анимации. Если я не могу исправить мерцание напрямую таким образом, возможно ли восстановить анимацию мин / макс без использования хакерских решений, таких как установка размера рамки непосредственно перед сворачиванием формы?

Спасибо за прочтение!

1 ответ

Я боролся с той же проблемой, о которой вы упомянули в #1, и она не относится к формам WPF без полей (хотя, похоже, она зависит как от времени рисования, так и от стилей окон, которые могут измениться при изменении типов границ). Это происходит и с нативными приложениями, и с полными границами.

В Windows 10 вы можете фактически увидеть тот же тип мерцания в самом проводнике Windows, когда используете границы левого и / или верхнего окон.

Судя по моим исследованиям, есть как минимум две пересекающиеся причины, одна из которых относится к дням до Aero, а другая была добавлена ​​Aero сверху. У причины перед Aero есть обходной путь, но у причины Aero есть только частичное решение. Пожалуйста, смотрите этот обзор Вопрос / Ответ, который объединяет 10-летние посты по этой теме и предлагает некоторые новые идеи (слишком долго, чтобы вставить содержимое здесь в этом вопросе). Наслаждаться:

Как сгладить уродливый джиттер / мерцание / прыжок при изменении размеров окон, особенно перетаскивая левую / верхнюю границу (Win 7-10; bg, bitblt и DWM)?

Да, я знаю, что в SO условное обозначение заключается в том, чтобы пометить исходный вопрос как дублирующий, а не связывать один вопрос с другим, однако этот случай немного необычен. В моем посте, посвященном обзору, содержится более 30 вопросов по этой теме, в котором собраны наиболее важные из них идеи, но в него не включены все идеи из первоначальных вопросов... это было бы нецелесообразно. Так что я на самом деле не хочу видеть оригинальные вопросы, помеченные как дуплисы, так и мои, поскольку в любом случае полезная информация будет потеряна. Это потому, что изменение размера окна - широкая тема; этот вопрос охватывает некоторые аспекты, мой вопрос охватывает другие.

Другие вопросы по тегам