Windows Presentation Foundation - Danysoft

Loading...

Apartado IV: Windows Presentation Foundation por Luis Alfonso Rey 

 

296 | Windows Presentation Foundation

Guía práctica de desarrollo de aplicaciones Windows en .NET

Windows Presentation Foundation | 297

Prólogo Apartado IV Para mi mujer y mis hijos, que son mi inspiración para hacer todos los días, lo que hago. Dado el carácter introductorio y no enciclopédico del libro, las siguientes páginas pretenden ser una presentación más o menos detallada de lo que es WPF pero no exhaustiva. Esto sitúa este libro en el ámbito de los manuales prácticos y no en el de los libros de referencia. La segunda advertencia que hay que realizar es que todos los ejemplos del libro han sido realizados con la versión de Visual Studio 2010 Últimate y esto puede presentar alguna discrepancia si se trata de seguir el libro con versiones diferentes, evidentemente si estas lo son en cuanto a la versión, en ocasiones estas discrepancias pueden ser más evidentes. Dicho esto y antes de entrar en materia, vamos a explicar qué es WPF. Muchos de los lectores ya lo sabrán en mayor o menor medida, razón por la cual están leyendo este libro, pero para aquellos que no lo tengan claro empezaremos diciendo que Windows Presentation Foundation es una tecnología para crear Guía práctica de desarrollo de aplicaciones Windows en .NET

298 | Windows Presentation Foundation

interfaces de aplicación, que trata de aunar los diferentes interfaces posibles (formularios, 3D y Web) mediante una sola API de programación. La primera versión de WPF se lanza dentro del Framework 3.0 de .NET, pero en las sucesivas versiones 3.5, 3.5 SP 1 y 4.0 se van incluyendo novedades, no solo a nivel tecnológico sino también de producto, básicamente en Visual Stuio y Blend, que nos permiten paulatinamente mejorar la experiencia de desarrollo, que inicialmente era muy pobre, hasta en convertirla en algo bastante sencillo, agradable y potente.

Guía práctica de desarrollo de aplicaciones Windows en .NET

Windows Presentation Foundation | 299

El Modelo De Aplicación Al empezar lo mejor es hacerlo por el principio, y este en Windows es hablar de qué tipo de aplicaciones se pueden crear con WPF. Estas pueden ser básicamente dos, aplicaciones Windows y aplicaciones de Navegación.

Aplicaciones de Windows Las primeras son más convencionales y en cuanto al modelo de aplicación se puede decir que muy similares a sus primas de WinForms. Las aplicaciones Windows está encapsuladas en una clase de tipo Application, esta clase es la responsable de crear y gestionar la vida de la aplicación, devolver los códigos de salida, procesar los parámetros de línea y en ocasiones gestionar la navegación.

Guía práctica de desarrollo de aplicaciones Windows en .NET

300 | Windows Presentation Foundation

La aplicación se ejecuta mediante el método Run que lanza el evento StartUp. Durante la vida de la aplicación el usuario puede intercambiar la aplicación activa, la cual posee el foco, y esto puede provocar el lanzamiento de los eventos Deativated, cuando se pierde el foco y Activated, cuando se vuelve a obtener. Otro evento sumamente útil relacionado con la aplicación es DispatcherUnhandledException, dicho evento el lanzado antes de que una excepción no manejada sea transmitida al usuario causando con ello la inestabilidad de la aplicación. El proceso de cierre es quizá el más complejo, ya que involucra el método Shutdown que cierra la aplicación, así como varios eventos como Exit que es lanzado cuando la aplicación trata de cerrarse, dándonos la oportunidad a través de la estructura ExitEventArgs y la propiedad ApplicationExitCode de devolver un código de salida. Además las aplicaciones se pueden cerrar por sucesos indirectos, como por ejemplo que la sesión de la máquina se cierre. Para este caso la aplicación nos provee de un evento SessionEnding que mediante la estructura SessionEndingCancelEventArgs nos permite cancelar el cierre de sesión programáticamente. Para ilustrar lo anterior lo único que tenemos que hacer es crear un nuevo proyecto de tipo XAML application, visualizar la ventana de propiedades en Visual Studio, buscar y abrir el archivo App.xaml o Application.xaml y depositar el cursor sobre la tag de Xml
End Sub C# private void Application_Exit(object sender, ExitEventArgs e) { MessageBox.Show("Adios");

} Tras la ejecución la aplicación mostrará un cartel cada vez que la cerremos.

Guía práctica de desarrollo de aplicaciones Windows en .NET

Windows Presentation Foundation | 301

Aplicaciones de navegación Las aplicaciones de navegación son un nuevo modelo de aplicaciones propuestas por WPF que pueden resultar muy interesantes. Se caracterizan fundamentalmente por el estilo que tienen de transitar entre su ventanas, o también llamadas páginas. El tránsito se produce de una manera muy similar a como se produce en las aplicaciones Web, mediante enlaces y métodos que nos remiten a una URI. Además estas aplicaciones también tienen un servicio de navegación que recuerda los “sitios” visitados y nos permite retornar a ellos, del mismo modo que en una aplicación Web. Habitualmente estas aplicaciones se ejecutan dentro del navegador, usando en algunos casos los propios controles para manejar resortes de su mecanismo de navegación. Esto merece una explicación más detallada, que la aplicación se ejecute dentro del navegador no significa que sea una aplicación Web. De hecho no lo es en absoluto, es una aplicación Windows que se ejecuta alojada en el navegador y que necesita, como las aplicaciones Windows, que el Framework se encuentre instalado en la máquina. En esto difieren de las aplicaciones Silverlight, que se ejecutan dentro del ámbito del navegador pero no necesitan el Framework sino un Plug-in que hace las veces de ejecutor. Además también se consideran aplicaciones de navegación aquellas aplicaciones Windows de WPF pero que hacen uso de la clase PageFunction o PageFunction(Of t). Para ejemplificar estas aplicaciones podemos crear una nueva WPF Application y en ella agregar una nueva Page Function. Dentro de la etiqueta podemos situar el siguiente código: XAML

Prueba de navegación Posteriormente en la ventana principal MainWindow.xaml depositar un nuevo botón desde la ToolBox y tras hacer doble clic sobre él, insertar en el cuerpo del gestor del evento asociado: Visual Basic.NET Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click Dim wizard As New NavigationWindow() wizard.Source = New Uri("PageFunction1.xaml", UriKind.Relative) wizard.ShowDialog()

End Sub Guía práctica de desarrollo de aplicaciones Windows en .NET

302 | Windows Presentation Foundation

C# private void button1_Click(object sender, RoutedEventArgs e) { NavigationWindow wizard = new NavigationWindow(); wizard.Source = new Uri("PageFunction1.xaml", UriKind.Relative); wizard.ShowDialog();

}  En el caso de las aplicaciones de navegación la clase Application se sustituye por su derivada NavigationApplication que nos provee de los servicios y miembros necesarios para articular una aplicación de navegación. El primer miembro del que hablaremos será una propiedad, StartUpURI que nos permite especificar la página de inicio de la aplicación. Para dar soporte a la posterior navegación la aplicación contiene un NavigationService. Este servicio no controla la página que actualmente se está mostrando sino el camino que se ha seguido para alcanzarla. Acceder a él es algo oscuro, se hace a través del método GetNavigationService que exige un parámetro de tipo DependantObject, que ahora es precipitado explicar pero, que para entenderlo rápidamente es un objeto de WPF. En ese sentido el mecanismo más fácil de satisfacer este parámetro es utilizando un formulario o un control dentro de este. Una vez obtenido este servicio él nos provee de métodos como GoBack o GoFoward para movernos por el historial o Navigate que nos permite dar un salto incondicional a una página cualquiera de la aplicación. De vuelta a la NavigationApplication no debemos olvidar que esta nos provee de ciertos eventos para controlar la navegación como Navigating, Navigated, NavigationProgress, NavigationFailed, NavigationStopped y LoadCompleted, todos ellos destinados a controlar los diferentes estados por los que pasa la aplicación tanto durante la navegación como en función del resultado de esta. Para crear una de estas aplicaciones hemos de seleccionar una plantilla diferente, en concreto WPF Browser Application. Un código de ejemplo para la invocación de un método de navegación podría ser este: Visual Basic .NET

NavigationService.GetNavigationService(Me).Navigate(New  Uri("Page1.xaml", UriKind.Relative))    C#

NavigationService.GetNavigationService(this).Navigate(new  Uri("Page1.xaml", UriKind.Relative)); Guía práctica de desarrollo de aplicaciones Windows en .NET

Windows Presentation Foundation | 303

Conclusión WPF nos ofrece diferentes modelos de aplicación, que nos permiten adaptarnos mejor a situaciones en las cuales un interfaz es mejor entendido, o presenta ventajas que nos permiten mejorar procedimientos como el despliegue o el control de la seguridad.

A continuación En el capítulo siguiente trataremos la especificación XAML, que nos servirá para que de manera declarativa podamos crear interfaces. Además trataremos algunos aspectos básicos de XML con el fin de facilitar la compresión de aquel lector que esté menos familiarizado con ellos.

Guía práctica de desarrollo de aplicaciones Windows en .NET

304 | Windows Presentation Foundation

Guía práctica de desarrollo de aplicaciones Windows en .NET

Windo ows Presenttation Foun ndation | 305

XA AML L En ell epígrafe an nterior hemo os comprobaado como un na determinada caraccterística differencia susttancialmentte WPF del resto r de apliccaciones .NE ET, el XA AML. Digo diferencia d au unque existe n otros tipos de aplicaciiones que utilizzan formulacciones simila ares. Sin em mbargo es inn negable que a simple vissta el XA AML se aplicca de manera única a estte tipo de prroyectos. Pero,, ¿qué es exa actamente XAML?, X puess un acrónim mo de eXten nsible Appliication Mark kup Langua age esto es, u un XML para a definir aplicaciones. L Las defin ne a modo dee formato de e serializacióón de objeto os, lo que quiere decir qu ue nosottros escribim mos un XML L que posterriormente seerá leído e in nterpretado de form ma que cada elemento e de entro de él see conveertirá en un objeto denttro de la aplicaación, y gen neralmente dentro d de un na ventaana o página a. Este proceso pueede sonar mu uy similar al que se prroduce con el e HTML porrque de hech ho lo es. Esspecíficamente se han buscado b las ventaajas de cada uno de los entornos e de desarrrollo para conformar c WPF W y en estte caso la ven ntaja princip pal es la separración efectiiva que nos permite p estee modelo, dee forma que desarrollad dor y diseñ ñador pueda an trabajar sobre la mism ma ventana de manera separada s y coinccidente o no, en el tiemp po.

Guía práctica de e desarrolllo de aplica aciones Win ndows en .N NET

306 | Window ws Presenta ation Found dation

Más een detalle un n fichero XA AML es un fiichero XML L y aunque ca asi todo el mund do compren nde bien cóm mo funciona un fichero XML X aquí va amos a inverrtir unas líneas para que posterio ormente tod do se entiend da correctam mente.

XM ML Fueraa de explicacciones histó óricas, podem mos decir qu ue un fichero o XML es un n fichero de texto formado f porr marcas y q que al menoss ha de estarr “bien form mado”. bien formado o se entiend de: Por b 1.

Q Que los docu umentos han n de manten ner una estru uctura estrictamente jeerárquica.

2. Q Que los docu umentos han n de tener un n solo elemeento raíz. 3. Q Que los atrib butos siemprre deben maarcar su conttenido entre e comillas. 4. Q Que es sensib ble a mayúsculas y minú úsculas.

Guía a práctica de d desarrolllo de aplica aciones Wiindows en .NET .

Windows Presentation Foundation | 307

Representación En XAML tienen representación casi todas las clases relacionadas con WPF, y se usan por tanto para establecer que objetos van a componer una ventana, por ejemplo. Dentro de un archivo XAML los elementos representan objetos mientras que los atributos propiedades. Esto sería por tanto un botón con una anchura de 30 y de color Rojo: XAML

En este caso la propiedad está representada como un elemento anidado y no como un atributo. Esto es así para poder insertar además de contenidos simples en las propiedades, valores mucho más complejos: XAML

Además como se puede ver en ocasiones el nombre de la propiedad está precedido por el de la clase Button.Background y en otras no. GradientStopCollection generalmente quiere decir que la propiedad cuando va precedida es que es una propiedad de la clase u objeto, mientras que en el segundo es tan solo un contenido compatible con el exigido por el tipo de la propiedad. Guía práctica de desarrollo de aplicaciones Windows en .NET

308 | Windows Presentation Foundation

Existen también otro tipo de propiedades bastante curiosas, echemos un vistazo al ejemplo: XAML