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

    @Sumor
    Grid подразумевает размещение элементов в определённой сетке или равномерно по экрану. Он, по умолчанию, не предполагает прокрутки. Поэтому его нужно использовать для размещения известного количества известных элементов.
    StackPanel располагает элементы подряд. При превышении размера используется прокрутка. Элементы могут быть разного типа. В StackPanel каждым добавленным элемент нужно управлять индивидуально.
    ItemsControl по сути похож на StackPanel, но тут мы имеем централизованное управление элементами - через Items или ItemsSource.
    ListBox добавляет к ItemsControl возможность выделять элементы.

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

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

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

    lam0x86
    @lam0x86
    Grid явно не подходит в силу отсутствия виртуализации. ListBox на первых порах подойдёт, но затем, скорее всего, вы всё-равно столкнётесь с его ограничениями - он поддерживает только визуальную виртуализацию, но не виртуализацию данных. Скажем, чат из 100 сообщений будет летать, но если вы планируете делать поддержку групповых чатов и с бесконечной историей, то есть вероятность, что приложение будет неотзывчивым уже начиная с 1000 сообщений истории.
    В общем, до этого надо еще дожить. Скорее всего, хватит ListBox (или ListView) как для списка чатов, так и для самих чатов. Идею с Grid-ом советую сразу отбросить - хотя бы из-за прожорливости в плане оперативки.
    Ответ написан
    4 комментария