Производительность рендеринга WPF - PullRequest
0 голосов
/ 28 октября 2009

У меня есть пользовательский элемент управления WPF, который связывается с DataTable и генерирует CheckBox и замаскированный EditBox для каждой строки в DataTable. У меня есть несколько экземпляров этого контроля в моей форме. Общее число генерируемых CheckBox превышает 200. Я вижу некоторые проблемы с производительностью рендеринга. Форма загружается со всеми статическими элементами управления (текстовые поля, раскрывающиеся списки) мгновенно, а через несколько секунд появляются CheckBox es.

Есть мысли?

Спасибо

Ответы [ 3 ]

2 голосов
/ 28 октября 2009

Что такое "генерация" флажков? Вы должны использовать ItemsControl (или подкласс) и привязать к нему данные, которые представляют флажки. Предполагая, что вы делаете это, вы хотите, чтобы ItemsControl использовал «виртуализацию», применяя свойство VirtualizingStackPanel.IsVirtualizing к ItemsControl следующим образом:

<ItemsControl VirtualizingStackPanel.IsVirtualizing="true" ... >

Возможно, вы также захотите включить «переработку контейнеров», что также повысит производительность. Это также делается с помощью прикрепленного свойства:

<ItemsControl VirtualizingStackPanel.VirtualizationMode="Recycling" ... >
2 голосов
/ 28 октября 2009

Если все 200 элементов не видны на экране, вам следует использовать виртуальный макет, который создает визуальное дерево только для видимых элементов. Это значительно улучшит вашу производительность.

0 голосов
/ 28 октября 2009

Слишком много флажков, безусловно, стоят дорого, если вы посмотрите на шаблоны основных элементов управления, они также заполнены большим количеством элементов.

Я бы посоветовал вам разделить ваш пользовательский интерфейс на вкладки или аккорды, которые будут вызывать менее заметные элементы на одном экране, а также помогут пользователю легко и быстро переходить к элементам.

VirtualizingStackPanel поможет, но если ваша привязка неверна, это может привести к непредсказуемым результатам.

  1. Пользовательский шаблон управления: Вы также можете создать свой собственный шаблон флажка с наименьшим количеством элементов UIE, например, простой прямоугольник, заполненный другим цветом в триггере свойства IsChecked. Это исключит несколько анимаций и т. Д., Которые, несомненно, могут улучшить вашу производительность рендеринга. Я считаю, что CheckBox наименее важен, когда дело доходит до анимации пользовательского интерфейса.

  2. Когда вы уверены, что будете использовать «Текст» в качестве содержимого, просто создайте шаблон с прямоугольником, чтобы показать заполненное / пустое значение, и поместите TextBlock с привязкой шаблона к содержимому.

  3. Старайтесь задавать фиксированную ширину / высоту для вашего флажка, всякий раз, когда вы фиксируете высоту / ширину ваших элементов управления / контейнеров, для диспетчера компоновки становится удобнее их визуализировать, а не продолжать вычислять и корректировать элементы. 1017 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...