Windows Presentation Foundation es el subsistema de Windows (librerías integradas en el sistema operativo), orientado a unificar los mecanismos de creación y gestión de interfaces de usuario. - Si bien la respuesta a nuestra pregunta inicial, es al menos en apariencia sencilla, vamos a tratar de profundizar en Windows Presentation Foundation (en adelante WPF ) para ver las implicaciones reales que conllevan la aparición de éste nuevo subsistema.
¿El por qué de WPF? Como ya se ha anticipado en su definición, WPF nace con el propósito de unificar, y es que cuando hablamos de interfaces de usuario nos vienen a la cabeza tres escenarios o entornos muy concretos : Aplicaciones de escritorio. Aplicaciones Web. Aplicaciones para dispositivos móviles.
¿Es lo mismo plantearse una interfaz de usuario para correr en un escritorio Windows que para correr bajo un navegador Web ? Es evidente que hace falta muy poca experiencia en la materia para poder contestar a esta pregunta, que por supuesto tiene como respuesta un rotundo NO, al menos hasta hace poco… La nueva filosofía que se nos plantea con herramientas como WPF radica en definir los elementos esenciales que deben componer la interfaz de usuario, delegando a un segundo paso la definición del aspecto de los mismos. Tanto los elementos como el aspecto se adaptará de la mejor forma posible al entorno en que se ejecute la aplicación, pero lo importante es que la definición usada será siempre la misma independientemente del escenario empleado.
Ejemplo 1: Pongamos que tenemos que desarrollar una aplicación para mostrar las facturas de un determinado mes. Para ello decido que el elemento de una interfaz de usuario que se adapta mejor a mis necesidades es una tabla ( grid ). Defino la tabla en la aplicación y le asigno una apariencia visual con unos degradados muy resultones. Ejecuto la aplicación en un entorno de escritorio. La tabla luce de maravilla mostrando sus magníficos degradados. Además por lo que parece he usado una tabla estupenda, por que sin escribir una sola línea de código puedo ordenar su contenido por una determinada columna haciendo un simple clic sobre la cabecera de una de ellas. Pero no sólo eso, si juego con la tecla “ shift ” puedo hacer ordenaciones compuestas, o puedo variar el orden de las columnas arrastrando las mismas con el ratón. Fantástico ¿no ?.
Voy a ver ahora que tal corriendo la aplicación bajo un navegador Web : Pues la verdad es que muy bien también; Es fantástico. El aspecto es muy similar, aunque a simple vista puedo detectar algunos cambios como en la profundidad visual de las celdas, pero no hay duda que me ha conservado esos degradados tan estupendos que he seleccionado. Hago clic sobre una columna y me ordena el contenido de la tabla por dicha columna, ¡esto es perfecto! Aunque… ¡Vaya! No puedo hacer ordenaciones múltiples con la ayuda de la tecla “ shift ”, y ¿por qué no puedo arrastrar columnas? Vaya, no es oro todo lo que reluce… Vale, pese a todo la cosa no va mal, vamos a ver que tal se muestra la aplicación bajo un dispositivo móvil: Efectivamente la tabla sigue estando, ¿pero que se ha hecho de esos degradados tan bonitos? ¿Por qué no puedo ordenar la tabla? En definitiva me doy cuenta de que la interfaz se ha empobrecido enormemente .
NOTA : Evidentemente se trata de un ejemplo orientativo que no pretende profundizar en lo que realmente se puede obtener de un determinado entorno ( AJAX , etc.) ¿Qué trata de plasmar el ejemplo 1? Pues aparte de algo evidente como que el entorno de escritorio hasta la fecha es sin duda el que nos permitirá crear interfaces más ricas y complejas, es que debemos tratar de realizar interfaces usando las mismas herramientas independientemente del entorno o entornos donde pretendamos ejecutar nuestra aplicación. En el ejemplo anterior, mientras que diseñaría un formulario Windows con una tecnología muy concreta como puede ser Windows Forms para la aplicación de escritorio, para ejecutar bajo el navegador Web , voy a tener que redefinir por completo la interfaz, usando otra tecnología como puede ser ASP.NET . En resumen, doble trabajo, doble necesidad de conocimientos .