Archive for December, 2008

Diseñando una interfaz para WPF

Posted in Expression Blend, WPF (Windows Presentation Foundation) on December 30th, 2008 by Daniel Priego – Be the first to comment

Este primer tutorial de ExpressionLab trata sobre cómo personalizar el look de los SimpleStyle Controls al trabajar en proyectos Windows Presentation Foundation (WPF) en Expression Blend.

Como la intención de estos artículos es la de presentar ejemplos de la vida real, Juan Ladetto me pasó una aplicación que estaba desarrollando y que sirve para hacer mirroring de servidores.

La aplicación, en lo que se refiere a funcionalidad, anda perfectamente…. pero le falta lo que por ahí llaman “una manita de gato” o bien, algo de diseño y este tutorial tratará sobre cómo personalizar el “look” de los elementos que la componen.

En este tutorial utilizaré las siguientes herramientas:

· Microsoft Expression Blend 2.0
· Microsoft Expression Design 2.0

Empecemos!

1.- Para empezar quiero presentarles la aplicación sobre la cual estaremos trabajando y las partes de Blend que utilizaremos:

Interfaz original de la aplicación WPF

Interfaz original de la aplicación WPF

Como puedes observar, la aplicación no es muy compleja y no tiene demasiadas cosas como para perderse en ella; lo que sí es un hecho es que no es agradable visualmente y que podría verse mil veces mejor. Así que manos a la obra!

2.- Para empezar, vamos a abrir la aplicación existente en Expression Blend, ya que trabajaremos sobre ella misma, manteniendo el código que está “detrás de ella” pero mejorando la capa de presentación visual.

Esta es una gran ventaja de Blend – tanto las aplicaciones de escritorio como las web se trabajan por diferentes capas – programación, presentación y – lo cual nos permite trabajar al mismo tiempo tanto a diseñadores como programadores teniendo excelentes resultados en menor tiempo y generando verdaderas experiencias ricas para el usuario.

La aplicación en Expression Blend

La aplicación en Expression Blend

En la siguiente captura puedes observar el diseño que realicé en Expression Design: te dará una mejor idea de cómo terminará viéndose la aplicación sobre la que estamos trabajando y de las capacidades de integración y creación de gráficos que tiene la Suite Expression.

Interfaz para la aplicación en Expression Design

Interfaz para la aplicación en Expression Design

3.- Ya familiarizados con lo que tenemos que hacer, empezaremos con los campos de texto – como puedes ver en el Diseño que creé en Expression Design éstos tienen “más onda” y aparte de eso las esquinas están redondeadas J.

Para personalizar los campos de texto en la aplicación haremos lo siguiente:

3a.- Seleccionar cualquiera de los campos de texto que tenemos en la aplicación y presionar el botón derecho del mouse e ir a la opción Edit Control Parts (Template) y posteriormente seleccionar Edit Template.

Edición del Template de Simple Style button en Expression Blend

 

SimpleStyle textbox

4.- Lo que sigue es modificar la apariencia del campo de texto. Como vimos en el ejemplo de Expression Design, la idea es que los bordes sean redondeados y un poco más grandes que los campos comunes. Para esto vamos a seleccionar el campo de texto y trabajaremos con el panel de Properties del lado derecho de la pantalla ( Window > Properties ).

Editando propiedades de un simple style texbox
Editando propiedades de un simple style texbox

En el panel Properties ubicamos el módulo Brushes, en el cual elegiremos ‘Solid Color Brush’ como relleno y de color elegiremos el blanco (#FFFFFFFF); hecho esto pasamos al siguiente módulo que es “Appearance” en el que modificaremos CornerRadius (por defecto en 2,2,2,2) y usaremos 10 en esta ocasión (basta con ponerlo una sola vez, lo cual hará que fije el mismo valor para todas las esquinas del rectángulo).

08

 

Aunque pareciera que hemos terminado estilizando nuestro campo de texto, aún falta hacer algunas correcciones:

En primer lugar debemos ajustar el elemento llamado “PART_ContentHost” (que es el contenedor del texto que ingresará el usuario o bien, que tendrá el campo por defecto), ya que sus esquinas, cuadradas, salen fuera de los bordes del campo de texto con esquinas redondeadas que hicimos en el paso anterior.

Una opción podría ser la de reducir el ancho del campo con tal de evitar que los bordes sobre salgan y aunque parece ser una buena alternativa, en este caso optaremos por definir el fondo como transparente, ya que al tener algunos de nuestros campos deshabilitados sus fondos cambian a ser grises y por lo tanto el “PART_ContentHost” con fondo blanco, quedaría fuera de lugar.

Para definir el fondo como transparente, seleccionaremos PART_ContentHost y en el panel de propiedades dentro de Brushes, haremos click en el pequeño cuadrado amarillo que se encuentra a un costado de Background y de las opciones elegiremos “Reset”. Esto borrará las propiedades de color que tenga el contenedor de texto y dejará el fondo transparente.

08a 08b

NOTA: Es posible también usar la primera opción que mencioné, reduciendo el ancho de la caja contenedora de textos y dejando el fondo blanco, aunque eso lo veremos en otra ocasión.

Finalmente, modificaremos el ancho y la altura de nuestro contenedor de texto con tal de que los textos no estén muy cercanos o encimados a los bordes del campo de texto, lo cual los hará más agradables.

09

Hechos los pasos anteriores, podemos regresar a la ventana principal de nuestra aplicación y oh sorpresa! Los demás campos de texto han cambiado también y ya tienen las esquinas redondeadas (esto se debe a que para todos los casos usamos el Simple Style text field y que editamos el template, que funciona para todos los elementos ‘Simple style text field’).

10


5.- El siguiente paso consiste en trabajar en el estilo que tendrán los botones de nuestra aplicación. Tal como en los campos de texto, la idea aquí es utilizar el diseño que creé en Expression Design para mantener el mismo look.

Dicho lo dicho, trabajaremos de forma similar como lo hicimos para personalizar los campos de texto:

Para personalizar los botones procederemos en manera similar a la que utilizamos con los campos de texto; la diferencia es que modificaremos también los colores del Simple Style button para que se vean tal como el diseño que creé en Expression Design.

6.- Para modificar el estilo de los botones que tengo en la aplicación selecciono cualquiera de éstos y presiono el botón derecho del mouse y elijo la opción Edit Control Parts (Template) > Edit Template.

En el panel Objects and Timeline seleccionamos el elemento ‘Border’ y nos dirigimos al panel de propiedades para cambiar el color de los botones.

Antes de poder definir los valores del degradado que deseamos que tenga nuestro botón, tenemos que quitar el estilo predefinido que tienen los botones en Blend; para hacer esto hacemos click sobre el cuadro amarillo que se encuentra a un costado de la propiedad Background, en el panel de propiedades, y presionamos ‘Reset’, lo cual dejará el fondo del botón transparente y listo para que podamos definir nuestro propio estilo.

13

Ahora el fondo del botón es transparente y podemos proceder a aplicar nuestro nuevo estilo.

14

Para definir el nuevo estilo de los botones, seleccionaremos ‘Gradient Brush’ en Brushes, dentro del Panel de Propiedades. Ahí crearemos tres diferentes colores: #FFFFFF, #DFDFDF y #C9C9C9. Checa la imagen siguiente para ver cómo los acomodé (están situados en el orden en el que los mencioné).

15

Una vez que has terminado de fijar estos colores u otros que quieras para tus botones, regresaremos a la ventana principal de nuestra aplicación donde encontraremos que los botones que creamos desde el inicio ya tienen el estilo que acabamos de crear. Sin complicaciones.

Habiendo personalizado el ‘look’ de nuestros botones y campos de texto, pasamos a darle el toque final a nuestra aplicación y para eso trabajaremos con Expression Blend y Expression Design en conjunto.

Iremos primero a Expression Design, y mientras presionamos la tecla Control, seleccionaremos las siguientes capas: Fondo, Nombre de la aplicación y Header y las copiaremos (Ctrl+C) e iremos a Expression Blend, que es donde las utilizaremos.

Estando en Blend, pegaremos las capas presionando Ctrl + v o bien, Edit > Paste . Por defecto, las capas se pegarán alineadas al borde superior izquierdo y por encima de todos los elementos de nuestra aplicación, por lo cual haremos click derecho en cualquiera de ellas (mientras siguen seleccionadas), y elegiremos la opción Order > Send to back para tenerlas debajo de los demás componentes.

16

Habiendo copiado y pegado las capas en Blend, las enviaremos detrás de todos los demás elementos: Haz click con el botón derecho del mouse sobre cualquiera de los elementos que acabas de pegar y selecciona la opción Order > Send to Back. Ya tenemos el fondo listo y el trabajo ahora consistirá en alinear y acomodar los botones y campos de texto tal y como se presentan en el diseño hecho en Design. Como último paso, ya pa’ cerrar, cambiaremos el ancho de Window (la ventana de nuestra aplicación y que se encuentra en el panel Objects and Timeline), a 311px de ancho, que es la medida de la interface diseñada en Expression Design y zaz, tenemos nuestra interfaz lista!

Espero que este primer tutorial les haya sido útil, espero sus comentarios y sugerencias. Nos vemos en el próximo post! felices fiestas :)

 

Nota: En este caso estamos editando un Simple Style Control, y por lo tanto editamos el Template directamente – en caso de ser un System Control debemos editar una copia que después elegiremos como recurso de la ventana actual o de toda la aplicación (ya trataré este tema en otro post).

En la siguiente ventana es donde vamos a editar las propiedades del campo de texto. Como referencia, siempre es bueno fijarse en el “breadcrumb” que se localiza en la parte superior derecha de la pantalla y que se encuentra marcado con el número 1 en la siguiente pantalla, ya que así sabremos qué Control es el que estamos editando y además nos presenta la facilidad de hacer click sobre el nombre del control, en el breadcrumb, y tener acceso a las opciones relacionadas con los templates de Control.