2008-09-08 7 views
11

Estaba leyendo las pautas de la interfaz de usuario de Windows Vista a las que se vinculó alguien en otra pregunta, y mencionaron que usted debería poder sobrevivir a un cambio a 120 DPI. Bueno, enciendo mi práctico VM con mi aplicación instalada, y ¿qué obtenemos ... AAAAGH !!! Error de interfaz de usuario masiva!Interfaz de usuario independiente de tamaño de fuente: ¿todo se rompió cuando cambié a 120 ppp?

Todo está desordenado: algunos contenedores no son lo suficientemente grandes para su texto; algunos controles que estaban colocados "uno al lado del otro" ahora están todos aplastados/separados; algunos botones no son lo suficientemente altos; mis columnas ListView no son lo suficientemente anchas ... eeek.

Parece que es necesario un enfoque completamente diferente. Mi anterior era básicamente el uso del diseñador VS2008 Windows Forms para crear, supongo, un diseño basado en píxeles. Puedo ver que si me quedara con Windows Forms, FlowLayoutPanel s sería útil, aunque los encontré bastante inflexibles en el pasado. Tampoco resuelven el problema donde los contenedores (por ejemplo, la forma en sí) no son lo suficientemente grandes; presumiblemente hay una manera de hacer eso? Tal vez esa propiedad AutoSize?

Esto también podría ser una señal de que es hora de enviar un barco a WPF; Tengo la impresión de que está específicamente diseñado para este tipo de cosas.

La cuestión básica parece reducirse a las siguientes:

  • Si tuviera que seguir con Windows Forms, lo son todos los trucos para lograr una distribución de tamaño de fuente independiente de que puedan sobrevivir a la configuración del usuario a su fuentes grandes, o configurando la pantalla a 120 DPI?
  • ¿Tiene WPF ventajas significativas aquí, y si es así, puede intentar convencerme de que vale la pena el cambio?
  • ¿Existen algunas "mejores prácticas" generales para diseños independientes del tamaño de fuente, ya sea en la pila .NET o en general?

Respuesta

11

Aprender cómo el ancla y Muelle propiedades trabajan en sus controles, dejan cualquier cosa que pueda AutoSize solo y use TableLayoutPanel cuando pueda.

Si hace estas tres cosas, obtendrá gran parte de la experiencia de diseño de WPF en Windows Forms. Un TableLayoutPanel bien diseñado hará todo lo posible para ajustar el tamaño de los controles para que se ajusten correctamente a la forma. Combinado con AutoSize controles, acoplamiento, y AutoScaleMode mencionado por Soeren Kuklau, usted debería ser capaz de hacer algo que se adapte bien. De lo contrario, su formulario podría tener demasiados controles sobre él; Considere dividirlo en páginas con pestañas, cajas de herramientas flotantes o algún otro espacio.

En WPF es mucho más fácil porque el concepto de controles de auto-tamaño está incorporado; en la mayoría de los casos, si está colocando un elemento WPF utilizando un par de coordenadas, lo está haciendo mal. Aún así, no puede cambiar el hecho de que a resoluciones más bajas no requiere mucho texto de 120 ppp para llenar la pantalla. A veces, el problema no es su diseño, sino un intento de poner demasiado en un espacio pequeño.

+0

Siempre he usado Anchor, Dock, AutoSize y TableLayoutPanels para lograr interfaces de usuario que se puedan traducir y dar como resultado formas redimensionables. Sin embargo, en la configuración de DPI alta con la casilla de verificación "Escala de PP de estilo XP" desactivada, encontré que cada una de mis aplicaciones tiene fuentes borrosas. ¿Algún consejo sobre arreglar eso? –

+2

@romkyns: a menos que su aplicación indique específicamente que es "muy sensible a los ppp", su aplicación obtendrá la misma solución kludge que todas las demás aplicaciones con errores. Cuando solicite los ppp actuales, le mienten a su aplicación (se dice que es 96), y la tarjeta gráfica escalará su formulario por usted, lo que lo hará borroso. Microsoft dejó de intentar hacer que los desarrolladores hicieran lo que se supone que deben hacer, es por eso que todos tienen que optar por ** escalar **. Google: manifiesto 'dpiAware'. –

4

Si tuviera que seguir con Windows Forms, lo son todos los trucos para lograr una distribución de tamaño de fuente independiente que puede sobrevivir el establecimiento de sus fuentes de gran parte del usuario, o la creación de la pantalla a 120 ppp?

Para uno, AutoScaleMode puede ser tu amigo.

4

En general, el problema es utilizar dos "constantes" diferentes para el diseño del formulario, y luego cambiar una de esas constantes sin cambiar la otra.

Está utilizando píxeles para sus entidades de formulario y puntos (básicamente, pulgadas) para especificar el tamaño de fuente. Los píxeles y los puntos están relacionados por DPI, por lo que debe cambiar el DPI y de repente los valores fijos de su píxel no se alinean con los valores fijos de su punto.

Existen paquetes y clases para esto, pero al final del día debe elegir una unidad u otra, o escalar una de las unidades según la constante cambiante.

Personalmente, cambiaría las entidades en el formulario a pulgadas. No soy una persona C#, por lo que no sé si esto es compatible de forma nativa, o si tiene que realizar un tamaño de forma dinámica en el inicio de la aplicación.

Si tiene que hacer esto en su software, siga adelante y dimensione todo normalmente (por ejemplo, a su 96 DPI habitual).

Cuando se inicia la aplicación, verifique que el sistema esté en 96 PPP antes de mostrar sus formularios. Si lo es, genial. De lo contrario, establezca una variable con el factor de corrección, escale y traduzca (modifique la ubicación y el tamaño) de cada entidad antes de mostrar el formulario.

Lo último, sin embargo, sería especificar todo en pulgadas o puntos (un punto es 1/72 de pulgada) y dejar que el SO se encargue de ello. Puede que tenga que hacer frente a casos de esquina (una pantalla al aire libre con un ajustado correctamente DPI mostraría su aplicación en unos pocos píxeles ...)

Cuestiones relacionadas