2012-08-12 16 views
7

Estoy buscando mostrar datos tabulares (canales de televisión), pero con opciones tales como DataGrid/UniformGrid/Table con FlowDocument/etc. No puedo entender cuál sería la mejor opción. El problema principal es que las celdas no son uniformes en tamaño ya que varían en función del período de tiempo, y me gustaría poner relleno entre ellas también. Además, solo debo poder mostrar una parte de la tabla y permitirles desplazarse hacia arriba/abajo/derecha para ver el resto.¿Qué control de cuadrícula/cuadrícula en WPF?

¿Cuál sería la mejor opción de control WPF para esto? Aquí hay una pequeña ilustración de lo que estoy buscando. El cuadrado blanco en la esquina superior izquierda es lo que quiero mostrar al inicio, y les permite desplazarse al resto.

enter image description here

+0

qué pasa con un panel de envoltura, se puede añadir un visor de desplazamiento para que crear el movimiento en sentido vertical, y siempre y cuando se ponga la pantalla en orden y tener la misma altura el tema de anchura y colocación Sería resuelto por el panel – Clueless

Respuesta

3

Hay varias maneras de lograr lo que estamos tratando de hacer aquí. Si el rendimiento no es un problema, ignoraría la virtualización y probaría el DockPanel. El inconveniente aquí es que tendría que agregar los elementos en orden en lugar de agregarlos por fila.

Otra opción sería usar dos paneles de pila (uno en cada dirección). Esto aborda el problema de la adición, pero requiere el uso de más paneles.

Ambas opciones anteriores requerirían elementos individuales para tener su altura/ancho establecido.

Una última opción (dependiendo de qué tan grande sea su cuadrícula), sería utilizar una cuadrícula con filas y columnas de tamaño fijo con elementos que abarcan filas (utilizando la propiedad rowspan). El inconveniente de este método es que no conozco ninguna buena forma de crear este control en xaml para números no especificados de filas/columnas, por lo que tendría que crearlo en código para obtener el número necesario de filas/columnas.

Si tiene problemas de rendimiento, puede intentar usar el VirtualizingStackPanel. Si esto aún no cumple con sus requisitos de rendimiento, deberá subclasificar el VirtualizingPanel y adaptarlo para satisfacer sus necesidades específicas.

Consulte here para obtener más información sobre el rendimiento del panel.

Yo sugeriría probar el método de dos StackPanel primero, entonces el método VirtualizingStackPanel y finalmente, si eso no funciona, entonces prueba el relleno VirtualizingPanel

se logra fácilmente mediante el establecimiento de la propiedad Margin en cada subcontrol.

Para desplazar el uso del ScrollViewer

+0

Creo que los StackPanels serían el mejor enfoque –

+0

Muchas gracias por la excelente respuesta. Voy a seguir adelante y aceptar esto y otorgar recompensa. Voy a usar los paneles de pila con el visor de desplazamiento, pero sería mejor tener 1 panel de pila vertical con los nombres de los canales en el lado izquierdo, y un panel de pila horizontal al lado de cada uno para los datos de EPG, o solo un bloque de paneles de pila horizontales, 1 para cada canal, e incluir el nombre/icono del canal en ese lugar? –

+0

@BrettPowell Probablemente tenga un control de elementos con un panel de distribución como el panel de elementos (que es el predeterminado) para la vertical y luego una plantilla con un control para el canal junto a un panel de distribución horizontal para los espectáculos. Esto debería simplificar el diseño y el enlace. – mydogisbox