Pregunta sobre .net, canvas, wpf, xaml, grid – Grid vs. Canvas

11

Estoy buscando una opinión sobre el uso de los paneles Canvas vs. Grid en WPF. Necesito hacer formularios de entrada clásicos que tengan básicamente diseños de cuadrícula, algunos pueden tener pequeñas cuadrículas de datos dentro, cuadros de grupo, pero todos alineados en el diseño de cuadrícula. Estoy teniendo problemas para usar el panel Grid o Canvas para todos mis formularios. Grid me está dando una buena estructura; Puedo mantener la alineación de los controles más fácilmente. Tendré una clase base (que hereda la clase de Windows) para todas las ventanas, por lo que el diseñador en Visual Studio será inútil, ya que tiene problemas para este tipo de herencia, y con el panel de cuadrícula realmente no necesito un diseñador, y puedo establece la ventana SizeToContent para que todo encaje bien. Pero nuevamente con Canvas, tengo la capacidad de posicionar los controles de la manera que me gusta, y esto es solo el beneficio que veo cuando uso Canvas.

No tenía mucha experiencia en WPF para predecir qué tipo de problemas podría obtener de las solicitudes de los clientes en cuanto al diseño. En los formularios web, a veces utilizo el posicionamiento absoluto para los formularios, en caso de que el cliente tenga alguna solicitud "especial" de tener el píxel de control hacia la derecha o hacia la izquierda en la parte superior, etc. todos trabajaron con clientes exigentes, a lo que me refiero.

Me gustaría ver lo que piensa, ¿cuáles son las ventajas y desventajas de ambos en la creación de diseño de formularios de solicitud de negocios? ¿Por qué uno es mejor que el otro? ¿Algún caso en el que un panel sea malo de usar y otro no? ¿Cuáles son las desventajas de un panel a otro? ¿Qué panel utilizarías?

Gracias

Tu respuesta

5   la respuesta
0

Iría con una grilla o una subclase de rejilla especializada. Tienes razón sobre la herencia de la vista. El diseñador de Visual Studio en UWP, WPF genera un código de soporte para la base y la subclase con los mismos nombres de método. No se compila.

Desde la fecha anterior a los genéricos, podemos volver a las metodologías anteriores. Uno de estos es una clase de ayuda. Cada vista implementaIBaseView y tiene una propiedadViewHelper oViewHelper<T>. enum ViewHelperOptions bien puede ser necesario. Si es necesario, cada uno de los ViewHelpers puede usar la herencia sin interrumpir el Diseñador visual. Esto permite el uso de código genérico y código de vista específico sin romper el modelo MVVM. Llamémoslo MVHVM ya que ViewHelper tiene conocimiento de ViewHelper. Esto separa aún más la V de la máquina virtual.

La implementación completa bien puede requerir el uso deActivator.CreateInstance. Otra consideración son los constructores que son invocados por el diseñador. Debe mover todo el código "se bloqueará si no se ejecuta" a una Inicialización generada desde (por ejemplo) el evento Loaded. Alternativamente usted puede hacer uso de (UWP):

if (!Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{ DoStuffWhichShouldOnlyBeDoneAtRunTime(); }
3

Puede obtener bastante en profundidad con el diseño real de la cuadrícula, el ancho de columna / fila, el ancho, la altura, etc.

En mi opinión, sería más fácil hacer el diseño de los diversos elementos en una cuadrícula controlando el tamaño de la fila y la columna que hacer todo lo que esté codificado en un lienzo. También facilitará las cosas si deciden cambiar las resoluciones más adelante en el futuro.

De Adam NathanWPF Unleashed (p. 168):

Imitando un lienzo con rejilla Si deja Grid con una sola fila y columna y configura HorizontalAlignment y VerticalAlignment de todos los elementos secundarios a valores distintos de Estirar, los elementos secundarios se agregan a la celda única como un lienzo. Configurar la alineación horizontal a la izquierda y la alineación vertical a la parte superior es como configurar Canvas.Left y Canvas.Top a 0. Configurar la alineación horizontal a la derecha y la alineación vertical a la parte inferior es como configurar Canvas.Right y Canvas.Bottom a 0. Además, aplicar valores de Margen a cada elemento puede darle el mismo efecto que configurar las propiedades adjuntas de Canvas en los mismos valores.

También puede ser creativo con el contenido de sus controles en la cuadrícula para tener un mejor nivel de control de diseño.

Un lienzo sería bueno para algo como un cuadro de diálogo que rara vez cambiará de tamaño, y solo tendrá unos pocos controles, porque tomaría mucho tiempo distribuirlos todos a medida que el número crezca.

Yo personalmente uso grillas yo mismo. Puede ser un poco más de trabajo colocar las cosas en el nivel de píxeles, pero para el 5% del tiempo que es necesario, vale la pena para abstraer gran parte de la molestia. También es bueno cuando existe la necesidad de cambiar el tamaño de las filas y columnas sobre la marcha, el GridSplitter hace que sea muy fácil.

2

Seguro Las rejillas parecen ser lo que necesitas para tus requerimientos.

Yo compararía las cuadrículas con las tablas en html (muy útil cuando se usa apropiadamente), mientras que Canvas es más como un div. La diferencia es que las cuadrículas son lo que deberían ser las tablas en HTML y también con div's vs Canvas.

En el tema de las cuadrículas, tómese el tiempo para definir sus definiciones de fila y las definiciones de columna, en lugar de poner márgenes en sus controles para colocar todo correctamente. Te arrepentirás si no lo haces.

¿Eh ... no sabes que no se recomienda usar tablas con fines de diseño, verdad? luiscubal
absolutamente, pero por el bien de este ejemplo, quería algo para usar como ejemplo, pensé que sería el mejor ejemplo. Como mencioné, las cuadrículas en WPF son las tablas que intentaban estar en HTML. Chris Nicol
0

Aunque no puede usar VS Designer, aún puede usar un diseñador visual XAML para crear / editar su contenido de cuadrícula.

Uno de los principales beneficios de UX de WPF / SL / XAML es la capacidad de diseño "líquido" similar a HTML. Si bien puede que no lo necesite con su diseño actual, es claramente el futuro y vale la pena aprender a perfeccionar.

Consulta la excelente lista de Rob Relyea de disponibles.Editores de XAML

Enlace roto, por favor arreglar kbo4sho88
16

Canvas está destinado principalmente a la funcionalidad de dibujo personalizado más que cualquier otra cosa. La cuadrícula es definitivamente la mejor opción disponible para personalizar su diseño.

Usted querrá ir con un diseño basado en cuadrícula o panel. Eche un vistazo a la descripción general de MSDN del sistema de diseño de WPF:msdn.microsoft.com/en-us/library/ms745058.aspx rmoore
Estoy de acuerdo con CSharperWithJava - <Grid> es un elemento mucho más práctico para el diseño general de la interfaz de usuario. Giffyguy
Aquí hay un tutorial para comenzar con diseños de cuadrícula:wpftutorial.net/GridLayout.html CodeFusionMobile

Preguntas relacionadas