Макет WPF в окне - PullRequest
       25

Макет WPF в окне

7 голосов
/ 10 сентября 2009

У меня есть пара списков в WPF Windows, с Height="Auto" Width="Auto", установленным в форме

Форма отлично подходит для разных разрешений, но проблема в том, что когда я нажимаю кнопку максимизации, толстый «черный L» становится видимым, а форма изменяется. Я видел это на довольно многих WPF-приложениях, но до сих пор не решал эту проблему.

Есть ли способ сделать DoubleBuffer Window или вызвать SuspendLayout () в WPF при изменении размеров элементов управления в форме? Как я могу избавиться от этого уродливого черного L?

Ответы [ 2 ]

3 голосов
/ 11 сентября 2009

Цитируя одну из последних Гензельминут :

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

Кажется, это имеет отношение к вашей проблеме, хотя я не знаю полного решения. Может быть, вы должны попытаться изменить некоторые приоритеты диспетчера?

0 голосов
/ 11 сентября 2009

Vault, я думаю, это может быть связано с виртуализацией пользовательского интерфейса, которую выполняют списки. Виртуализация позволяет списку загружать только те элементы пользовательского интерфейса, которые отображаются. Список работает с помощью VirtualizingStackPanel в качестве элемента ItemsPanelTemplate.

Так что мое предположение, похоже, заключается в том, что при максимизации окна были бы выдвинуты списки, чтобы генерировать больше элементов пользовательского интерфейса, и задержка могла бы вызвать черный «L».

Вы можете удалить виртуализацию и проверить, появляется ли по-прежнему черная буква «L». Кстати, виртуализация на самом деле «хорошая» вещь, и ее отключение - вообще плохая идея.

...