Задать вопрос
@RishatIksanov

WPF. Какие элементы использовать в мессенджер-приложении?

В окне должны быть список диалогов(у каждого название+фотография диалога), а рядом сообщения этого диалога(у каждого сообщения фото, время, текст). Какие лучше использовать для них элементы? Общий Grid со StackPanel'ями, в которые добавлять ещё элементы? Или ListBox? Подскажите как, по-вашему, лучше, или как это делается в популярных мессенджерах.
  • Вопрос задан
  • 885 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
lam0x86
@lam0x86
Grid явно не подходит в силу отсутствия виртуализации. ListBox на первых порах подойдёт, но затем, скорее всего, вы всё-равно столкнётесь с его ограничениями - он поддерживает только визуальную виртуализацию, но не виртуализацию данных. Скажем, чат из 100 сообщений будет летать, но если вы планируете делать поддержку групповых чатов и с бесконечной историей, то есть вероятность, что приложение будет неотзывчивым уже начиная с 1000 сообщений истории.
В общем, до этого надо еще дожить. Скорее всего, хватит ListBox (или ListView) как для списка чатов, так и для самих чатов. Идею с Grid-ом советую сразу отбросить - хотя бы из-за прожорливости в плане оперативки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Sumor
Grid подразумевает размещение элементов в определённой сетке или равномерно по экрану. Он, по умолчанию, не предполагает прокрутки. Поэтому его нужно использовать для размещения известного количества известных элементов.
StackPanel располагает элементы подряд. При превышении размера используется прокрутка. Элементы могут быть разного типа. В StackPanel каждым добавленным элемент нужно управлять индивидуально.
ItemsControl по сути похож на StackPanel, но тут мы имеем централизованное управление элементами - через Items или ItemsSource.
ListBox добавляет к ItemsControl возможность выделять элементы.

Это весьма общая классификация: с помощью свойств, обработчиков, шаблонов можно при большом желании превратить одно в другое.

В вашем случае, в зависимости от логики приложения можно предложить следующее.
Если диалоги у вас в программе представлены списком (лучше BindingList или ObservableCollection), то их располагать в ItemsControl со StackPanel в качестве ItemsPanel. В шаблон элемента вы добавляете название, фотографию диалога и ListBox с сообщениями.
Если не хотите заморачиваться с ItemsControl, то тогда использовать StackPanel, но тогда при добавлении диалога вам вручную придётся добавлять элементы для названия, фото и собщений.

Можно ещё рассмотреть вариант с использованием TreeView, где в качестве первого уровня будут диалоги, а второго уровня - сообщения. Автоматом получаете закрытие/открытие диалогов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы