Сложный пользовательский интерфейс внутри ListBoxItem

В WPF я могу добавить любой пользовательский интерфейс в ListBoxItem , предоставив ListBox с помощью ItemTemplate :

                  

Результаты в:

введите описание изображения здесь

Есть ли способ сделать то же самое в Windows Forms?

Редактировать:

1 – Есть ли какой-либо способ добиться того же в Windows Forms, при этом сохраняя separation of concerns между View и Application Logic таким образом, что, если я позже захочу полностью переопределить View , мне не придется реорганизовывать все приложение?

2. Поддерживает ли winforms привязку данных таким образом, что каждая из моих ListBoxItems может быть привязана к сложному Entity , в конечном итоге включающая преобразование промежуточного типа из данных модели в данные UI и обратно, таким образом, что мне не нужно писать тонны кода шаблона, чтобы заполнить представление, а затем передать значения пользовательского интерфейса обратно в модель для сохранения?

3 – Что делать, если я хотел бы представить Animations таким образом, чтобы текущий SelectedItem анимационно расширялся в какой-то режим «Детали строки», где вы можете увидеть много дополнительной информации?

4. Поддерживает ли winform поддержку UI Virtualization таким образом, что, если у меня есть, скажем, 1 миллион элементов, для загрузки пользовательского интерфейса не требуется целая жизнь, а только отображение того, что видно на экране?

5 – Скажем, я хотел представить сложную графику для уравнения. Ускоряет ли winforms аппаратное ускорение?

6 – Как сделать все это Resolution Independent таким образом, чтобы ListBox и все его содержимое растягивались до размера доступного windows, чтобы использовать более крупные экраны при сохранении совместимости с меньшими?

7 – Было предложено использовать элемент управления ListView вместо обычного ListBox , позволяет ли ListView добавлять в него ЛЮБОЙ интерфейс? Можно ли добавить видео для каждого элемента? или сложный шаблон Master / Detail с кнопками «Сохранить и редактировать»?

8 – Предоставляет winforms согласованную и адекватную Document Model, которая позволяет создавать высокоточные документы WYSIWYG и другие типы богатого контента?

Чтобы ответить на всеобъемлющий вопрос – как это сделать в WinForms – я бы предложил следующее:

  1. Используйте WPF ListBox в вашем приложении WinForms, завернутый в ElementHost. У этого есть свои проблемы, но я думаю, что это самый чистый способ получить желаемый эффект.

    если это не соответствует законопроекту, то

  2. Используйте сторонний пакет управления, в котором есть компоненты, которые поддерживают это (Infragistics и DevExpress оба делают).

  3. Создайте собственный элемент управления ListBox, который переопределяет краску и т. Д., Чтобы отобразить желаемый контент.

К вашим индивидуальным вопросам:

  1. Есть ли какой-либо способ добиться того же в Windows Forms, при этом сохраняя separation of concerns между View и Application Logic таким образом, что, если я позже захочу полностью переопределить View , мне не нужно будет реорганизовывать все приложение ?
    Раньше я использовал парадигму MVP (модель-представление-презентатор) с Windows Forms. Он работает для отделения представления от бизнес-логики, хотя и не так чисто, как подход MVVM с WPF. Лучший совет, который я могу дать, заключается в следующем: не ставьте бизнес-логику в обработчики событий.

  2. Поддерживает ли winforms привязку данных таким образом, что каждая из моих ListBoxItems может быть привязана к сложной Entity , в конечном итоге включающая преобразование промежуточного типа из данных модели в данные UI и обратно, таким образом, что мне не нужно писать тонны код шаблона, чтобы заполнить представление, а затем передать значения пользовательского интерфейса обратно в Модель для сохранения?
    Нет. Связывание данных Windows Forms не поддерживает сложную привязку данных. Вы можете реализовать что-то самостоятельно через ICustomTypeDescriptor или IBindingSource, которые могут принимать сложные пути и оценивать их для целей привязки … но для этого ничего не существует.

  3. Что делать, если я хотел бы представить Animations таким образом, чтобы текущий SelectedItem анимированно расширялся в какой-то режим «Детали строки», где вы можете увидеть много дополнительной информации?
    Вам придется сворачивать свои собственные списки ListBox и ListBoxItems Windows и переопределять операции рисования.

  4. Поддерживает ли winform поддержку UI Virtualization таким образом, что если у меня есть, скажем, 1 миллион элементов, для загрузки пользовательского интерфейса не требуется целая жизнь, а только отображение того, что видно на экране?
    Не из коробки, но у некоторых сторонних пакетов управления есть компоненты, которые поддерживают типы виртуализации … но совсем не так, как это делает WPF.

  5. Скажем, я хотел представить сложную графику для уравнения. Ускоряет ли winforms аппаратное ускорение?
    Windows Forms основан на GDI +. GDI + не аппаратно ускорен: Windows Forms очень медленная под Windows7?

  6. Как сделать все это Resolution Independent таким образом, чтобы ListBox и все его содержимое растягивались до размера доступного windows, чтобы использовать более крупные экраны при сохранении совместимости с меньшими?
    Вы можете использовать Docking and Anchoring в Windows Forms для этого. Или вы можете добавить собственные обработчики событий для выполнения соответствующих настроек макета на основе разрешения и размера windows.

  7. Было предложено использовать элемент управления ListView вместо обычного ListBox , позволяет ли ListView добавлять в него ЛЮБОЙ интерфейс? Можно ли добавить видео для каждого элемента? или сложный шаблон Master / Detail с кнопками «Сохранить и редактировать»?
    Это упрощает … но ListView – это просто ListBox, который поддерживает несколько типов просмотров. Он также более ограничен с точки зрения привязки данных. http://blog.gfader.com/2008/09/winforms-listbox-vs-listview.html .

  8. Имеет ли winforms последовательную и адекватную [Document Model] [2], которая позволяет создавать высокоточные документы WYSIWYG и другие типы богатого контента?
    Нет. Совсем нет. Даже не немного.

Короче говоря, если это приемлемое решение, я бы обернул ваш WPF ListView в ElementHost и назвал его днем.

Мы сделали это, используя UserControls в прокручиваемой панели. Подготовлен пользовательский элемент управления, на котором есть все элементы управления редактирования. Добавьте их в прокручиваемую панель с свойством dosk, чтобы установить значение Top. Реализовано поведение выбора элемента, просмотрев события фокуса и щелчка на добавленных элементах управления пользователями.

  • Обнаружение режима проектирования из конструктора Control
  • Winforms - нажмите / перетащить в любом месте формы, чтобы переместить его, как если бы щелкнул в заголовке формы
  • конвертировать шестнадцатеричный код в имя цвета
  • Как закрыть форму входа и показать основную форму без закрытия моего приложения?
  • Visual Studio 2010 внезапно не может видеть пространство имен?
  • Причины того, почему лейбл WinForms не хочет быть прозрачным?
  • Определите размер метки в зависимости от количества текста и размера шрифта в Winforms / C #
  • Найти элемент управления в Windows Forms по имени
  • Добавить элемент в элемент управления Listview
  • Как определить, когда минимизируется форма windows?
  • Воспроизведение файла MP3 в приложении WinForm
  • Interesting Posts

    mySQL – создание новой таблицы с использованием данных и столбцов из трех таблиц

    Как вставить исходный текст?

    Как остановить воспроизведение видео на YouTube в Android-браузере?

    Подключитесь к Linux по имени, а не по IP

    Как проверить учетные данные smtp перед отправкой почты?

    Создание прокси-сервера веб-службы в Visual Studio из файла WSDL

    Является ли изменчивая переменная «читается» так же быстро, как обычно?

    Я не могу открывать / пинговать любые антивирусные сайты

    Apache 2.4 + php 5.4.7 не может загрузить php5apache2_4.dll

    Мониторинг сетевой активности в телефонах Android

    Найти общие подстроки между двумя символьными переменными

    Ошибка: выполнение выполнено для задачи «: app: packageRelease». > Невозможно вычислить hash из /../AndroidStudioProjects/../classes.jar

    Регулярное выражение для выбора запятых вне кавычек

    Как запустить НЕ повышенный в Vista (.NET)

    Как подсчитать уникальные символы в строке

    Давайте будем гением компьютера.