Interfaz de usuario compleja dentro de ListBoxItem

En WPF, puedo agregar cualquier UI en ListBoxItem al proporcionarle a ListBox una ItemTemplate :

                  

Resultados en:

enter image description here

¿Hay alguna forma de lograr lo mismo en Windows Forms?

Editar:

1 – ¿Hay alguna forma de lograr lo mismo en Windows Forms, manteniendo la separation of concerns entre la View y la Application Logic la Application Logic de tal manera que si más adelante quería redefinir completamente la View , no tendría que refactorizar el toda la aplicación?

2 – ¿Las winform soportan el enlace de datos de tal manera que cada uno de mis ListBoxItems pueda vincularse a una Entity compleja, incluyendo eventualmente una conversión de tipo intermedio de datos de modelo a datos de UI y viceversa, de tal forma que no tenga que escribir toneladas de código repetitivo para llenar la vista y luego volver a pasar los valores de la interfaz de usuario al modelo para poder guardarlos?

3 – ¿Qué pasa si quiero introducir Animations de tal manera que el elemento SelectedItem actualmente se expanda animadamente en algún tipo de modo de “Detalles de fila”, donde puede ver mucha información adicional?

4 – ¿Winforms admite la UI Virtualization de tal manera que, si tengo, digamos 1 millón de elementos, no lleva toda la vida cargar la interfaz de usuario, y solo muestra lo que está visible en la pantalla?

5 – Digamos que quería introducir gráficos complejos a la ecuación. ¿Los winforms están acelerados por hardware?

6 – ¿Cómo hago toda esta Resolution Independent de tal manera que el ListBox y todo su contenido se extienden hasta el tamaño de ventana disponible para aprovechar pantallas más grandes mientras se mantiene la compatibilidad con las más pequeñas?

7 – Se ha sugerido usar el control ListView lugar de un ListBox normal, ¿proporciona el ListView la posibilidad de agregar CUALQUIER UI en él? ¿Puedo agregar videos, por ejemplo, para cada artículo? o una plantilla compleja Maestra / Detalle con los botones Guardar y editar?

8 – ¿Winforms proporciona un modelo de documento coherente y adecuado que permite la creación de documentos WYSIWYG de alta fidelidad y otros tipos de contenido enriquecido?

Para responder a la pregunta general: cómo hacer esto en WinForms, sugeriría lo siguiente:

  1. Use un ListBox de WPF en su aplicación WinForms, envuelto en un ElementHost. Esto tiene sus propios problemas, pero creo que es la forma más limpia de obtener el efecto deseado.

    si eso no se ajusta a la factura, entonces

  2. Use un paquete de control de un tercero que tenga componentes que lo soporten (tanto Infragistics como DevExpress lo hacen).

  3. Gire su propio control ListBox derivado que anula la pintura, etc. para representar el contenido deseado.

Para sus preguntas individuales:

  1. ¿Hay alguna forma de lograr lo mismo en Windows Forms, manteniendo la separation of concerns entre la View y la Application Logic la Application Logic de tal manera que si más adelante quisiera redefinir completamente la View , no tendría que refactorizar toda la aplicación? ?
    En el pasado, he usado el paradigma MVP (model-view-presentater) con Windows Forms. Funciona para separar la vista de la lógica comercial, aunque no tan limpiamente como un enfoque MVVM con WPF. El mejor consejo que puedo dar es: no pongas lógica comercial en los manejadores de eventos.

  2. ¿Winforms admite la vinculación de datos de tal manera que cada uno de mis ListBoxItems pueda vincularse a una Entity compleja, incluyendo finalmente una conversión de tipo intermedio de datos de modelo a datos de la interfaz de usuario y viceversa, de forma que no tenga que escribir toneladas de ¿un código repetitivo para llenar la vista y luego volver a pasar los valores de la interfaz de usuario al Modelo para poder guardar?
    No. El enlace de datos de Windows Forms no admite el enlace de datos complejo. Puede implementar algo usted mismo a través de ICustomTypeDescriptor o IBindingSource que puede tomar rutas complejas y evaluarlas con fines vinculantes … pero no existe nada para esto.

  3. ¿Qué sucede si quiero introducir Animations de tal manera que el elemento SelectedItem actualmente se expanda de forma animada en algún tipo de modo “Detalles de fila”, donde puede ver mucha información adicional?
    Tendría que desplegar su propio ListBox de Windows Forms y ListBoxItems y anular las operaciones de pintura.

  4. ¿Las winforms admiten la UI Virtualization de tal manera que, si tengo, digamos 1 millón de elementos, no lleva toda la vida cargar la interfaz de usuario y solo mostrar lo que está visible en la pantalla?
    No de fábrica, pero algunas suites de control de terceros tienen componentes que admiten tipos de virtualización … pero no del todo como lo hace WPF.

  5. Digamos que quería introducir gráficos complejos a la ecuación. ¿Los winforms están acelerados por hardware?
    Windows Forms se basa en GDI +. GDI + no está acelerado por hardware: ¿ Windows se forma muy lento en Windows 7?

  6. ¿Cómo hago toda esta Resolution Independent de tal manera que el ListBox y todos sus contenidos se extienden hasta el tamaño de ventana disponible para aprovechar pantallas más grandes mientras se mantiene la compatibilidad con las más pequeñas?
    Puede usar Acoplamiento y Anclaje en Windows Forms para lograr esto. O puede agregar controladores de eventos personalizados para realizar los ajustes de diseño adecuados en función de la resolución y el tamaño de la ventana.

  7. Se ha sugerido usar el control ListView lugar de un ListBox normal, ¿proporciona el ListView la posibilidad de agregar CUALQUIER UI en él? ¿Puedo agregar videos, por ejemplo, para cada artículo? o una plantilla compleja Maestra / Detalle con los botones Guardar y editar?
    Esto es simplificador … pero un ListView es simplemente un ListBox que admite múltiples tipos de vista. También es más limitado en términos de enlace de datos. http://blog.gfader.com/2008/09/winforms-listbox-vs-listview.html .

  8. ¿Los winforms proporcionan un [Modelo de documento] coherente y adecuado [2] que permite la creación de documentos WYSIWYG de alta fidelidad y otros tipos de contenido enriquecido?
    No, en absoluto. Ni siquiera un poquito.

En resumen, si es una solución aceptable, envolvería su Lista de WPF en un ElementHost y lo llamaría un día.

Lo hicimos usando UserControls en un panel desplazable. Preparó un control de usuario que tiene todo el control de edición sobre él. Agréguelos a un panel desplazable con la propiedad de dosificación configurada en Superior. Implementé el comportamiento de selección de elementos observando los eventos de enfoque y clic en los elementos de control de usuario agregados.