2009-05-06 2 views
3

Есть ли вообще какие-либо известные проблемы с производительностью в WPF, связанные с изменением размера столбца сетки?WPF-столбец с изменениями размеров производительности

У меня есть приложение, где мне нужно делать некоторые вещи в столбце, но для всех различных решений я считаю, что изменение размера столбца замедляется. Это применимо, когда у меня обычно более 1000 элементов в моем списке, но я предполагаю, что это не слишком много для WPF ..? Так; общий вопрос заключается в том, что вы столкнулись с медленным изменением размера столбца и нашли ли вы решения для этого? Что вызвало это?

Некоторые подробности о моем конкретном случае:

я могу иметь две разные вещи в моих колонках; ComboBox или TextBlock. ComboBox должен заполнить весь столбец и перейти к изменению размера столбца, а щелчок по пустой области столбца с помощью TextBlock должен выбрать строку. Вот где проблема. Для всех решений я должен это изменить размер столбца. Единственный способ сделать изменение размера гладким, что я нашел, - это добавить StackPanel вне их с Orientation = «Horizontal», но с этим я не могу добиться описанных выше стилей.

Вот некоторые наблюдения:

  • Добавление стиля HorizontalContentAlignment = «Stretch» ​​к элементам списка делает ComboBoxes Stretch и TextBlocks интерактивными, но и колонка размер медленно.
  • Добавление фона = «Прозрачный» к StackPanel или к элементам, которые вставлены внутри них, также решает проблему, но делает изменение размера медленным.
  • Добавление внешней StackPanel с свойством Orientation = «Horizontal» делает изменение размеров плавным, но я не могу применять стили, как описано.
+1

Я уже видел это в своем приложении, но этого больше не происходит, и я не знаю почему. Извините, что так неинформативен, но, по крайней мере, вы знаете, что вы не сумасшедший. Какую версию платформы .NET вы используете. Microsoft заявляет о многих улучшениях производительности в 3.5 и 3.5 SP1. – PeterAllenWebb

ответ

2

Вы пробовали виртуализировать элементы в ListView? При виртуализации панель виртуализации создает только визуальные элементы для элементов, которые находятся в представлении. Это позволяет вам иметь большое количество элементов без проблем с производительностью, как вы упомянули. См. VirtualizingStackPanel для получения более подробной информации. Также The Layout System. Вы можете создавать свои собственные панели виртуализации. Если вы посмотрите «виртуализация + wpf» в Google, вы найдете множество хитов для виртуализации холстов, WrapPanels и т. Д.

Надеюсь, это поможет.

+0

Мы попытались виртуализировать элементы ранее. Я не уверен, разрешило ли это проблему изменения размера, но с помощью прокрутки виртуализации в нашем списке был ужасный опыт (медленный!), Поэтому мы не могли его использовать. Мы пришли к выводу, что в WPF это может оказаться еще не вызванным, получив ту же проблему в более простых тестовых приложениях. Любые мнения по этому поводу? – stiank81

+0

Я знаю, что они сделали несколько улучшений для виртуализации в SP1. Сначала они добавили отложенную прокрутку. Во-вторых, они добавили переработку контейнеров (в качестве опции). У меня никогда не было проблем с использованием VirtualizingStackPanel. –

+0

Итак, виртуализация решает проблему - хотя она генерирует новую, поэтому вы ответили на вопрос. Благодарю. На самом деле, проблема заключается в том, что мы используем TreeView, поскольку мы показываем дерево. Вместо этого переписал его, чтобы использовать ListView, и это в значительной степени решает все. Возможно, я ошибаюсь, но ListViewes выглядит намного более зрелым, чем TreeView. Попробуем избежать TreeView с этого момента. Любые мнения по этому поводу? Благодаря! – stiank81

Смежные вопросы