You are on page 1of 23

Windows Phone

Desarrollo de aplicaciones

Aroa Solana

Sinopsis El presente texto pretende ofrecer al lector una visin acerca del desarrollo de aplicaciones para dispositivos mviles que cuenten con el Sistema Operativo Windows Phone 7 de Microsoft. Los contenidos abarcan desde el diseo de la interfaz de usuario utilizando Silverlight pasando por la gestin de eventos tctiles y texturas junto con el enlace a colecciones, datos y su posterior presentacin en pantalla.

Aroa Solana Ruiz es Microsoft Certified IT Professional en Database Developer, tambin Microsoft Certified Technology Specialist en SQL Server 2005, .NET Framework 3.5, Windows Forms Applications, SQL Server 2005, al igual que Database Development en SQL Server 2008. Actualmente ostenta la certificacin MCT (Microsoft Certified Trainer) que la permite impartir un gran nmero de cursos oficiales de Microsoft y trabajar como formadora en Alhambra-Eidos. Ha impartido formacin sobre la tecnologa .NET, desarrollo de aplicaciones Windows, Web, ADO, Distribuidas, WPF, WCF, WWF, Silverlight y UML, por otra parte imparte formacin en administracin de bases de datos SQL Server y desarrollo de bases de datos SQL Server, tanto en 2005 como en 2008. Adems posee experiencia en J2SE y J2EE. Dentro de la gestin de procesos posee la certificacin ITIL V2 Foundations.

Luarna
Windows Phone. Desarrollo de aplicaciones Aroa Solana Alhambra-Eidos De esta edicin: 2011, Luarna Ediciones, S.L.

www.luarna.com Madrid, mayo de 2011 ISBN: 978-84-15013-09-9 Versin 1.0 (25/05/2011)

Cualquier forma de reproduccin, distribucin, comunicacin pblica o transformacin de esta obra solo puede ser realizada con la autorizacin de sus titulares, salvo excepcin prevista por la ley. Dirjase a CEDRO (Centro Espaol de Derechos Reprogrficos, www.cedro.org) si necesita fotocopiar, escanear o hacer copias digitales de algn fragmento de esta obra.

Windows Phone. Desarrollo de aplicaciones


Aroa Solana

Indice
1. INTRODUCCIN ............................................................................................................................................................................ 7 DESCRIPCIN GENERAL ....................................................................................................................................................................... 7 EL HARDWARE .................................................................................................................................................................................. 8 SERVICIOS Y SENSORES........................................................................................................................................................................ 9 PRIMERA APLICACIN EN SILVERLIGHT .................................................................................................................................................. 10 ARCHIVOS ESTNDAR EN SILVERLIGHT ................................................................................................................................................... 11 Temas ............................................................................................................................................................................................. 16 Puntos y Pxeles .............................................................................................................................................................................. 16 EL XAP ......................................................................................................................................................................................... 17 UN PROGRAMA XNA ....................................................................................................................................................................... 17 EJEMPLOS...................................................................................................................................................................................... 20 2.ORIENTACIN.............................................................................................................................................................................. 24 PANEL DINMICO ............................................................................................................................................................................ 24 EVENTOS DE ORIENTACIN ................................................................................................................................................................ 29 EJEMPLO DE RELOJ .......................................................................................................................................................................... 30 EJEMPLOS...................................................................................................................................................................................... 31 3.APLICACIONES TCTILES .............................................................................................................................................................. 39 MANEJO TCTIL CON XNA ................................................................................................................................................................ 39 INTERFAZ GESTURE EN XNA ............................................................................................................................................................... 41 EVENTOS TCTILES EN SILVERLIGHT ...................................................................................................................................................... 42 LOS EVENTOS DE MANIPULACIN ........................................................................................................................................................ 45 Eventos Enrutados .......................................................................................................................................................................... 46
Eventos como concepto de programacin............................................................................................................................................... 48 Parmetro emisor (sender) y datos de evento ......................................................................................................................................... 49 La propiedad OriginalSource de RoutedEventArgs ................................................................................................................................... 49 La propiedad Handled ........................................................................................................................................................................ 50

COMPORTAMIENTOS EXTRAOS .......................................................................................................................................................... 50 EJEMPLOS...................................................................................................................................................................................... 51 4.TEXTURAS Y MAPAS DE BITS ....................................................................................................................................................... 60 DIBUJO DE TEXTURAS EN XNA ............................................................................................................................................................ 60 EL ELEMENTO IMAGE EN SILVERLIGHT ................................................................................................................................................... 62 IMGENES A TRAVS DE LA WEB ......................................................................................................................................................... 63 Image e ImageSource...................................................................................................................................................................... 65 Carga de mapas de bits de cdigo local ........................................................................................................................................... 66 Capturas desde la Cmara............................................................................................................................................................... 67 EJEMPLOS...................................................................................................................................................................................... 70 5.PROBLEMAS EN LA ARQUITECTURA ............................................................................................................................................ 72 NAVEGACIN BSICA ....................................................................................................................................................................... 72 UTILIZACIN DE DATOS EN LAS PGINAS ................................................................................................................................................ 76 Compartir datos entre pginas ........................................................................................................................................................ 78 ESTADO DE LAS PGINAS ................................................................................................................................................................... 81 ALMACENAMIENTO AISLADO .............................................................................................................................................................. 83 EJEMPLOS...................................................................................................................................................................................... 85 6.XML ............................................................................................................................................................................................. 90 UN TEXTBLOCK EN CDIGO ................................................................................................................................................................ 91 LA PROPIEDAD INHERITANCE .............................................................................................................................................................. 92 Propiedades como elementos .......................................................................................................................................................... 93 COLORES Y PINCELES ........................................................................................................................................................................ 94 CONTENIDOS Y PROPIEDADES DE CONTENIDOS ........................................................................................................................................ 98 COLECCIN DE RECURSOS ................................................................................................................................................................ 100 X:KEY Y X:NAME ........................................................................................................................................................................... 103 ESTILOS ...................................................................................................................................................................................... 104 HERENCIA DE ESTILOS ..................................................................................................................................................................... 105 PLANTILLAS .................................................................................................................................................................................. 105 DEGRADADOS ............................................................................................................................................................................... 106 EJEMPLOS.................................................................................................................................................................................... 107
La biblioteca de fotos ............................................................................................................................................................................. 68

Pgina 5

7.ENLACE A DATOS ....................................................................................................................................................................... 110 ORIGEN Y DESTINO ........................................................................................................................................................................ 110 MODOS ...................................................................................................................................................................................... 112 Conversores de enlace................................................................................................................................................................... 113 EL ORIGEN THIS ......................................................................................................................................................................... 116 CONVERTIDORES CON PROPIEDADES ................................................................................................................................................... 119 MECANISMOS DE NOTIFICACIN ........................................................................................................................................................ 121 CONTEXTO DE DATOS ..................................................................................................................................................................... 121 EJEMPLOS.................................................................................................................................................................................... 125 8.CONTROLES Y BARRAS DE APLICACIN ..................................................................................................................................... 129 ICONOS DE BARRA DE APLICACIN ...................................................................................................................................................... 129 CONFIGURACIN DE APLICACIONES .................................................................................................................................................... 134 Caractersticas tctiles .................................................................................................................................................................. 137 Barra de aplicaciones .................................................................................................................................................................... 138 Elementos y Controles ................................................................................................................................................................... 141 Control Slider y RangeBase ............................................................................................................................................................ 142 USO DE CRONMETROS .................................................................................................................................................................. 146 ENTRADAS DE TEXTO Y POR TECLADO .................................................................................................................................................. 152 EJEMPLOS.................................................................................................................................................................................... 157

Pgina 6

1. INTRODUCCIN
Teniendo en cuenta las versiones anteriores que Microsoft proporciona para desarrollar las soluciones orientas a dispositivos mviles, destacar que Windows Phone 7 es una revolucin ya que est basado en un nuevo enfoque para el mercado de la telefona mvil. Microsoft Windows Phone 7 no slo representa una ruptura con el pasado de Windows Mobile sino que adems tambin se diferencia de otros telfonos inteligentes que existen hoy en da en el mercado. Los dispositivos que usan Windows Phone 7 se realizar por varios fabricantes y estar disponible para una gran variedad de proveedores. Para los programadores, Window Phone e es algo tambin interesante, ya que es compatible con dos plataformas de programacin popular y moderna: Silverligh y XNA. Silverlight, un spin off en el lado del cliente basado en Windows Presentation Foundation (WPF), ya ha dado a los programadores Web un poder sin precedentes para desarrollar interfaces de usuario sofisticadas con una mezcla entre controles tradicionales, texto en alta calidad, grficos vectoriales, medios de comunicacin, animacin y enlace a datos que se ejecutan en mltiples plataformas y navegadores. Windows Phone 7 extiende Silverlight para dispositivos mviles. XNA, es la plataforma de juegos de Microsoft que soporta tanto grficos basados en sprites 2D y 3D con una arquitectura tradicional. A pesar de que XNA se asocia sobre todo con la implementacin de juegos para la consola Xbox 360, los desarrolladores tambin pueden utilizar XNA para utilizarlo en sus propios PCs, s como el elegante reproductor de audio de Microsoft, el Zune HD. Cualquiera, tanto Silverlight como XNA tendrn sentido como nica plataforma de aplicacin para Windows Phone 7, pero los desarrolladores pueden elegir.

Descripcin General
Todos los programas para Windows Phone 7 estn escritos en cdigo administrado .NET. Aun que en este libro slo mostraremos los ejemplos en C#, tambin se pueden escribir aplicaciones en Visual Basic .NET. Las plataformas Silverlight y XNA para Windows Phone 7 comparten algunas bibliotecas, y puedes usar algunas bibliotecas de XNA en un programa Silverlight y viceversa. Pero no puedes crear un programa que mezcle elementos visuales de ambas plataformas. Quiz ser posible en el futuro, pero hoy en da no. Antes de crear un proyecto de Visual Studio, debemos decidir si elegimos Silverlight o XNA para llevar a cabo nuestra aplicacin. Generalmente se usar Silverlight para escribir programas que podramos clasificar como aplicaciones o utilidades. Estos programas se construyen a partir de una combinacin de marcado y cdigo. El marcado es el Extensible Application Markup Language, o XAML. La mayora del XAML define un diseo de controles de interfaz de usuario y paneles. Los archivos de cdigo subyacente tambin pueden realizar algunas tareas de inicializacin y de la lgica, pero en general son relegados a la gestin de eventos de los controles. Silverlight es ideal para llevar a Windows Phone el estilo de las aplicaciones (RIA), incluyendo los medios de comunicacin y Web. Silverlight para Windows Phone es en su versin 3 excluyendo algunas caractersticas que no son apropiadas para el telfono, pero compensa con algunas mejoras. Por otro lado, XNA se usa principalmente para escribir juegos de alto rendimiento. Para juegos 2D, se definen los sprites y fondos en torno a mapas de bits, para juegos 3D se definen los modelos en el espacio 3D. La accin del juego, que incluye objetos que se mueven alrededor de la pantalla grfica y realizacin de encuestas para la entrada del usuario, se sincroniza con la incorporada en el bucle de juego XNA.

Pgina 7

La diferenciacin entre las aplicaciones basadas en Silverlight y juegos basados en XNA es conveniente pero no restrictiva. Por supuesto que puede usar Silverlight para escribir juegos e incluso se pueden escribir aplicaciones tradicionales utilizando XNA, aunque ello a veces puede ser difcil. En particular, Silverlight podra ser ideal para los juegos que son menos orientados a la resolucin en grficos, o el uso de grficos vectoriales en lugar de grficos de mapa de bits. Un programa de tipo Tetris puede funcionar bastante bien en Silverlight. Es probable que encuentres XNA un poco ms difcil de estirar en el territorio de Silverlight.

El Hardware
Los desarrolladores con experiencia en seleccin de dispositivos de Windows Mobile encuentran cambios significativos en la estrategia de Microsoft Windows Phone 7. Microsoft ha sido muy proactivo en la definicin de las especificaciones de hardware, a menudo referido como un "chasis". Las versiones iniciales de los dispositivos para Windows Phone 7 tendrn un tamao de pantalla compatible. Muchas otras caractersticas de hardware se garantiza que existan en cada dispositivo. La parte frontal del telfono se compone de una pantalla multi-touch y tres botones de hardware en general, colocados en una fila debajo de la pantalla. De izquierda a derecha, estos botones se llaman de Atrs, en Inicio y bsqueda:

Botones de los dispositivos mviles

Atrs: Los programas pueden utilizar este botn para sus necesidades de navegacin propio, al igual que el botn Atrs de un navegador Web. En la pgina principal de un programa, el botn hace que el programa termine. Inicio: Este botn lleva al usuario a la pantalla inicial del telfono. Bsqueda: El sistema operativo utiliza este botn para iniciar una funcin de bsqueda. Las versiones iniciales de los dispositivos para Windows Phone 7 tenan un tamao de pantalla de 480 800 pxeles. En el futuro, las pantallas sern de 320 480 pxeles tambin. No hay opciones de otra pantalla de telfono de Windows 7, as que obviamente estos dos tamaos de pantalla de desempear un papel muy importante en el desarrollo del telfono. En teora, por lo general es considerado lo mejor escribir programas que se adapten a cualquier tamao de pantalla, pero esto no es siempre posible, especialmente en el desarrollo de juegos. Es probable que se encuentre especficamente dirigidas las aplicaciones a estos dos tamaos de pantalla, hasta el punto de tener caminos condicionales en el cdigo y diferentes archivos XAML de diseo que son dependientes del tamao. Por supuesto, los telfonos se pueden girar para poner la pantalla en modo horizontal. Algunos programas pueden requerir que el telfono tenga una cierta orientacin, mientras que otros podran ser ms adaptables. Usted tiene el control completo sobre el grado en que usted apoya la orientacin. De forma predeterminada, las aplicaciones de Silverlight aparecen en el modo de retrato, pero probablemente querr escribir sus aplicaciones Silverlight para que se ajusten a los cambios de orientacin. Los nuevos eventos estn disponibles esPgina 8

pecficamente para el fin de detectar el cambio de orientacin, y algunos cambios de orientacin son manejados de forma automtica. Por el contrario, los programadores de juegos por lo general se imponen una determinada orientacin en el usuario. En el modo de retrato, la pequea pantalla es la mitad de una pantalla VGA (es decir, 640 480). En el modo de paisaje, la pantalla grande tiene una dimensin que a veces se llama WVGA. En el modo de paisaje, la pequea pantalla tiene una relacin de aspecto de 3:2 o 1,5; la gran pantalla tiene una relacin de aspecto de 05:03 o 1.66. La mayora de las entradas del usuario a un programa en Microsoft Windows Phone 7 vendr a travs de multi-touch. Las pantallas que incorporan la tecnologa de la capacitancia al tacto, lo que significa que hay que responder a una punta de los dedos humanos, pero no se forma un lpiz ptico o de otro tipo de presin. Windows Phone 7 responder a por lo menos cuatro puntos de contacto simultneamente. Otro elemento importante es un teclado de hardware opcional. Tenga en cuenta que los telfonos pueden ser diseados de distintas maneras, as que cuando el teclado est en uso, la pantalla puede ser en modo vertical u horizontal. Un programa en Silverlight que utiliza la entrada de teclado debe responder a los cambios de orientacin para que el usuario pueda ver la pantalla y usar el teclado sin preguntarse qu idiota dise el programa hacia los lados. Un teclado en pantalla tambin se proporciona, conocido en los crculos de Windows como el Panel de entrada de software o SIP. Los programas de XNA tambin tienen acceso al teclado de hardware y SIP.

Servicios y Sensores
Un dispositivo con Windows Phone 7 debe contener otras caractersticas de hardware, a veces denominados sensores y proveer de servicios de software, quiz a travs de la asistencia de hardware. Estos son los que afectan a los desarrolladores ms: Wi-Fi: El telfono dispone de Wi-Fi para acceso a Internet para complementar el acceso 3G a datos a travs del proveedor del mvil. El software del telfono incluye una versin de Internet Explorer. Cmara: El telfono tiene por lo menos una cmara de 5 megapxeles con flash. Los programas pueden invocar el programa de la cmara para su aportacin propia, o cuando se registra a s mismos como una aplicacin de fotos ms y aparecen en un men para acceder a las imgenes fotografiadas. Acelermetro: Un acelermetro detecta la aceleracin, que en la fsica es un cambio de velocidad. Cuando la cmara sigue siendo, el acelermetro responde a la gravedad. Los programas pueden obtener un vector tridimensional que indica cmo la cmara se orienta con respecto a la tierra. El acelermetro tambin puede detectar movimientos bruscos del telfono. Localizacin: Si el usuario as lo desea, el telfono puede usar mltiples estrategias para determinar dnde se encuentra geogrficamente. Los suplementos de un dispositivo de hardware GPS con informacin de la Web o torres de telefona celular. Si el telfono est en movimiento, el rumbo y la velocidad tambin pueden estar disponibles. Vibracin: El telfono puede vibrar a travs del programa de control. Radio FM: Una radio FM est disponible y accesible a travs del programa de control. Notificaciones emergentes: Algunos de los servicios Web requieren normalmente el telfono para sondear con frecuencia el servicio y para obtener informacin actualizada. Esto puede drenar la vida de la batera. Pgina 9

Primera aplicacin en Silverlight


En el cuadro de dilogo Nuevo proyecto, a la izquierda en Plantillas instaladas, seleccione Visual C # y luego de Silverlight para Windows Phone. En la zona media, seleccione Windows Phone de la aplicacin. Seleccione una ubicacin para el proyecto, e introduzca el nombre del proyecto: SilverlightHelloPhone.

Cuando se crea el proyecto puedes encontrar una imagen de un telfono de gran pantalla en modo retrato con un rea de pantalla de 480 800 pxeles de tamao. Esta es la vista de diseo. Aunque usted puede arrastrar de forma interactiva los controles de una caja de herramientas para disear la aplicacin, me voy a centrar en cambio, en que muestra cmo escribir su propio cdigo y marcado XAML. Varios archivos se han creado para este proyecto SilverlightHolaMundo y se muestran bajo el nombre del proyecto en el Explorador de soluciones ms a la derecha. En la carpeta Propiedades tres archivos que normalmente se puede ignorar cuando ests creando pequeos programas de Silverlight de ejemplo para el telfono. Slo cuando en realidad ests en el proceso de hacer una aplicacin real de estos archivos se vuelven importantes. Sin embargo, es posible que desee abrir el archivo WMAppManifest.xml. En la etiqueta de la aplicacin en la parte superior, vers el atributo:
Title="SilverlightHolaMundo

Eso es slo el nombre del proyecto seleccionado. Introduzca algunos espacios para que sea un poco ms amigable.
Title="Silverlight Hola Mundo

Este es el nombre utilizado por el telfono y el emulador del telfono mostrar el programa en la lista de aplicaciones instaladas. Si eres realmente ambicioso, tambin puede editar los archivos ApplicationIcon.png y background.png que utiliza el telfono para simbolizar visualmente el programa. El archivo SplashScreenImage.jpg es lo que el programa muestra como es la inicializacin. En la barra de herramientas estndar de Visual Studio en el men del programa, vers una lista desplegable que muestra probablemente "Windows Phone 7 emulador." La otra opcin es "Windows Phone 7." Esta es la forma de implantar el programa ya sea al emulador o a un telfono que est conectado al ordenador mediante USB. Slo para ver que todo funciona correctamente, seleccione Windows Phone 7 emulador y presione F5 (o seleccione Iniciar depuracin en el men Depurar). Su programa se compilar rpidamente y en la barra de estado puedes encontrar el texto "Conexin de telfono de Windows 7 emulador". Pgina 10

La primera vez que use el emulador durante un perodo de sesiones, podra tomar un poco de tiempo para ponerse en marcha. Si deja el emulador que corra entre editar / crear / ejecutar ciclos, Visual Studio no es necesario para establecer de nuevo esta conexin. Pronto el telfono emulador aparecer en el escritorio y vers la pantalla de inicio, seguido por este programa Silverlight que no hace nada, ya que se implementa y se ejecuta en el emulador. En el telfono puedes encontrar ms o menos la misma imagen que viste en la vista de diseo.

Imagen del emulador

El emulador del telfono tiene un pequeo men flotante en la parte superior derecha que est a la vista cuando se mueve el ratn para esa ubicacin. Puede cambiar la orientacin a travs de este men, o cambiar el tamao de emulador. De forma predeterminada, el emulador se muestra en tamao real del 50%, aproximadamente del mismo tamao que la imagen en esta pgina. Cuando se muestra el emulador al 100%, se vuelve enorme, y ustedes se preguntaran "Cmo voy a guardar un telfono de este tamao en el bolsillo?" La diferencia consiste en la densidad de pxeles. Su pantalla del ordenador probablemente tiene alrededor de 100 pxeles por pulgada. (De manera predeterminada, Windows asume que las pantallas son 96 ppp). La pantalla en un verdadero dispositivo de telfono es ms de 2 veces ms. Cuando se muestra el emulador al 100%, que se est viendo todos los pxeles de la pantalla del telfono, pero en alrededor de 250% su tamao real. Usted puede terminar la ejecucin de este programa y volver a la edicin del programa o bien Visual Studio (con Maysculas + F5 o seleccionando Detener depuracin en el men Depurar) o haciendo clic en el botn Atrs en el emulador. No salga del propio emulador, haga clic en la X en la parte superior del men flotante! Mantener el emulador ejecutndose har las implantaciones posteriores que vayan mucho ms rpido. Si bien el emulador sigue en funcionamiento, mantiene todos los programas desplegados en l. Si hace clic en la flecha en la parte superior derecha de la pantalla de inicio, obtendr una lista que incluir este programa identificados por el texto Silverlight Hola Mundo" y se puede ejecutar el programa de nuevo. El programa va a desaparecer de esta lista al salir del emulador.

Archivos estndar en Silverlight


Con el proyecto cargado en Visual Studio, eche un vistazo en el Explorador de soluciones. Vers dos pares de archivos: App.xaml y App.xaml.cs adems de MainPage.xaml y MainPage.xaml.cs. Los archivos App.xaml y MainPage.xaml son archivos en XAML, mientras que App.xaml.cs y MainPage.xaml.cs son archivos de cdigo C #. Este esquema de nombres peculiares pretende dar a entender que los archivos de C # son "de cdigo subyacente" los archivos relacionados con los dos archivos XAML. Este es un concepto bsico de Silverlight. Quiero dar un pequeo recorrido sobre estos cuatro archivos. Si nos fijamos en el archivo App.xaml.cs, puedes encontrar una definicin de espacio de nombres que es lo mismo que el nombre del proyecto y una clase dePgina 11

nominada de la aplicacin que se deriva de la clase de aplicaciones de Silverlight. He aqu un fragmento que muestra la estructura general:
namespace SilverlightHelloPhone { public partial class App : Application { public App() { InitializeComponent(); } } }

Todos los programas de Silverlight contienen una clase de aplicacin que se deriva de la aplicacin, realiza esta clase de inicializacin de la aplicacin a escala, puesta en marcha, y las tareas de apagado. Se dar cuenta de que esta clase se define como una clase parcial, lo que significa que el proyecto probablemente debera incluir otro archivo de C # que contiene los miembros adicionales de la clase de la aplicacin. Pero dnde est? El proyecto tambin contiene un archivo App.xaml, que tiene una estructura general de esta manera:
<Application x:Class="SilverlightHelloPhone.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml /presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clrnamespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clrnamespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"> </Application>

Usted reconoce este archivo como XML, pero ms precisamente se trata de un archivo XAML, que es una parte importante de la programacin de Silverlight. En particular, los desarrolladores a menudo usan el archivo App.xaml para el almacenamiento de los recursos que se utilizan en la aplicacin. Estos recursos pueden incluir combinaciones de colores, pinceles de degradado, estilos, etc. El elemento raz es de aplicacin, que es la clase de Silverlight que la clase se deriva de la aplicacin. El elemento raz contiene cuatro declaraciones de espacio de nombres XML. Dos son comunes en todas las aplicaciones de Silverlight, y las otras dos son nicas en el telfono. La primera declaracin de espacio de nombres XML (xmlns ") es el espacio de nombres estndar para Silverlight, y ayuda a que el compilador localice e identifique las clases de Silverlight como la aplicacin en s. Como con la mayora de las declaraciones de espacio de nombres XML, este URI no apuntan a nada en realidad, es slo un URI que Microsoft posee y que ha definido para este propsito. La segunda declaracin de espacio de nombres XML se asocia con XAML en s mismo, y permite que el archivo haga referencia a algunos elementos y atributos que forman parte de XAML y no especficamente de Silverlight. Por convencin, este espacio de nombres est asociado con un prefijo de "x " (que significa "XAML). Entre los varios atributos con el soporte de XAML y se hace referencia con esta "x" es el prefijo de clase, que a menudo se pronuncia "x clase." En este archivo en particular XAML x: Class se le asigna el nombre SilverlightHolamundo.App. El espacio de nombres SilverlightHolaMundo deriva de la clase de aplicaciones de Silverlight, el elemento raz. Es la misma definicin de clase que vimos en el archivo App.xaml.cs pero con una sintaxis muy diferente. Los archivos App.xaml.cs y App.xaml realmente definen dos mitades de la misma clase de la aplicacin. Durante la compilacin, Visual Studio analiza App.xaml y genera otro archivo cuyo nombre en cdigo App.g.cs. La "g"significa "generado". Si quieres ver este archivo, usted lo puede encontrar en el subdirectorio \ obj \ Pgina 12

Debug del proyecto. El archivo contiene App.g.cs otra definicin parcial de la clase de la aplicacin, y contiene un mtodo denominado InitializeComponent que se llama desde el constructor en el archivo App.xaml.cs. Eres libre de editar los archivos App.xaml y App.xaml.cs, pero no perder el tiempo con App.g.cs. Ese archivo se vuelve a crear cuando se genera el proyecto. Cuando se ejecuta un programa, la clase de la aplicacin crea un objeto de tipo PhoneApplicationFrame y establece que el objeto de su propiedad RootVisual propia. Este marco es de 480 pxeles de ancho y 800 pxeles de altura y ocupa la superficie de la pantalla completa del telfono. El objeto PhoneApplicationFrame se comporta algo as como un navegador web, navegando a un objeto llamado MainPage. MainPage es la segunda clase importante en todos los programas de Silverlight y se define en el segundo par de archivos, MainPage.xaml y MainPage.xaml.cs. En los programas de Silverlight ms pequeos, es en estos dos archivos que se le pasa la mayor parte de su tiempo. Aparte de una larga lista de directivas de uso, el archivo MainPage.xaml.cs es muy simple:
using using using using using using using using using using using using System; System.Collections.Generic; System.Linq; System.Net; System.Windows; System.Windows.Controls; System.Windows.Documents; System.Windows.Input; System.Windows.Media; System.Windows.Media.Animation; System.Windows.Shapes; Microsoft.Phone.Controls;

namespace SilverlightHelloPhone { public partial class MainPage : PhoneApplicationPage { // Constructor public MainPage() { InitializeComponent(); } } }

Las directivas para el uso de espacios de nombres que comienzan con las palabras System.Windows son para las clases de Silverlight, a veces tendrs que completar stas con otras directivas. El espacio de nombres Microsoft.Phone.Controls contiene extensiones de Silverlight para el telfono, incluyendo la clase PhoneApplicationPage. Una vez ms, vemos otra definicin de clase parcial. Esta se define una clase denominada MainPage que deriva de la clase PhoneApplicationPage Silverlight. Esta es la clase que define las imgenes que realmente va a ver en la pantalla cuando se ejecuta el programa SilverlightHolaMundo. La otra mitad de esta clase MainPage se define en el archivo MainPage.xaml. Aqu est el archivo casi completo, a formatear un poco para adaptarse a la pgina impresa, y excluyendo una seccin que es un comentario al final, pero sigue siendo un trozo ms aterrador de marcado:
<phone:PhoneApplicationPage x:Class="SilverlightHolaMundo.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presenta tion" xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml xmlns:phone="clrnamespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clrnamespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

Pgina 13

xmlns:mc="http://schemas.openxmlformats.org/markupcompatibility/2006" mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" shell:SystemTray.IsVisible="True"> <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> <TextBlock x:Name="ApplicationTitle" Text="Mi Aplicacion" Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock x:Name="PageTitle" Text="nomre de pagina" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> </Grid> </Grid> </phone:PhoneApplicationPage>

Las cuatro primeras declaraciones de espacio de nombres XML son los mismos que en App.xaml. Al igual que en el archivo App.xaml, un atributo x: Class tambin aparece en el elemento raz. Aqu se indica que la clase MainPage en el espacio de nombres SilverlightHolaMundo deriva de la clase de Silverlight PhoneApplicationPage. Esta clase PhoneApplicationPage requiere su propia declaracin de espacio de nombres XML, ya que no es una parte estndar de Silverlight. La "d" (de "diseo") y el "mc" (de "compatibilidad de marcas") declaraciones de espacio de nombres son para el beneficio de programas de diseo XAML, como Expression Blend y el diseador en Visual Studio s. Los atributos DesignerWidth DesignerHeight y se pasan por alto durante la compilacin. La compilacin del programa genera un nombre de archivo MainPage.g.cs que contiene otra definicin de clase parcial para MainPage (puedes verlo en el subdirectorio \ obj \ Debug) con el mtodo InitializeComponent que se llama desde el constructor en MainPage.xaml.cs. En teora, los archivos App.g.cs y MainPage.g.cs generados durante el proceso de construccin son exclusivamente para uso interno por el compilador y pueden ser ignorados por el programador. Sin embargo, a veces, cuando un mal programa produce una excepcin, uno de estos archivos viene apareciendo a la vista. Podra ayudar a su comprensin del problema el hecho de hayamos visto estos archivos antes de que misteriosamente aparezcan delante de su cara. Sin embargo, no intente modificar estos archivos para solucionar el problema! El verdadero problema est, probablemente, en algn lugar del correspondiente archivo XAML!. El cuerpo del archivo MainPage.xaml contiene varios elementos anidados llamado Grid, StackPanel y TextBlock en una jerarqua de elementos primarios y secundarios. Observe la palabra que utiliza: elemento. En la programacin de Silverlight, esta palabra tiene dos significados relacionados. Es un trmino XML utilizado para indicar los elementos delimitados por etiquetas de inicio y fin. Pero tambin es una palabra usada en Silverlight para referirse a los objetos visuales, y de hecho, el elemento denominativo aparece en los nombres de dos clases de Silverlight reales. Muchas de las clases que se utiliza en Silverlight son parte de esta jerarqua de clases importantes:

Pgina 14

Adems de UIElement, muchas clases de Silverlight derivan de DependencyObject. Pero UIElement tiene la distincin de ser la clase que tiene el poder de aparecer como un objeto visual en la pantalla y para recibir la entrada del usuario. (En Silverlight, todos los objetos visuales pueden recibir la entrada del usuario.) Tradicionalmente, esta entrada de usuario viene desde el teclado y el ratn, en el telfono, la mayora de la entrada del usuario entra por el tacto. La nica clase que se deriva de UIElement es FrameworkElement. La distincin entre estas dos clases es un artefacto histrico de Windows Presentation Foundation. En WPF, es posible que los desarrolladores creen sus propios marcos nicos por los que se derivan de UIElement. En Silverlight esto no es posible, por lo que la distincin es bastante sin sentido. Nuestra meta original era crear un programa en Silverlight que muestra un texto en el centro de la pantalla, pero dada la presencia de un par de ttulos, vamos a modificar ese objetivo de mostrar el texto en el centro de la pgina, aparte de los ttulos. El rea del contenido de la pgina del programa es la cuadrcula hacia el final del archivo precedido por el comentario "ContentPanel -. Esta cuadrcula tiene un nombre de "ContentPanel" y me voy a referir a l de manera informal como el "panel de contenido" o "red de contenido". El rea de la pantalla que corresponde a este Ritual, aparte de los ttulos que a menudo se le refiere como el "rea de contenido".
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <TextBlock Text="Hola, Windows Phone 7!" HorizontalAlignment="Center" VerticalAlignment="Center" /> </Grid>

Text, HorizontalAlignment y VerticalAlignment son todas las propiedades de la clase TextBlock. La propiedad Text es de tipo cadena. Las propiedades HorizontalAlignment y VerticalAlignment son los tipos de numeracin HorizontalAlignment y VerticalAlignment, respectivamente. Cuando hace referencia a un tipo de enumeracin en XAML, slo necesita el nombre del miembro. No tiene mucho sentido tener un ttulo en la pgina de una aplicacin de Silverlight con slo una sola pgina, y puede eliminar ese segundo TextBlock si lo desea. Los cambios que realice en este archivo XAML se reflejar en la vista de diseo. Ahora puede compilar y ejecutar este programa:

Pgina 15

Tan simple como es, este programa muestra algunos de los conceptos esenciales de la programacin en Silverlight, incluyendo diseo dinmico. El archivo XAML define una distribucin de elementos en un rbol visual. Estos elementos son capaces de organizar ellos mismos de forma dinmica. Las propiedades HorizontalAlignment y VerticalAlignment puede poner un elemento en el centro de otro elemento, o (como se podra suponer) a lo largo de uno de los bordes o en una de las esquinas. TextBlock es uno de una serie de elementos posibles que puede utilizar en un programa de Silverlight, mientras que otros incluyen imgenes de mapa de bits, pelculas, y los controles familiares como botones, deslizadores, y cuadros de lista.

Temas
Desde la pantalla inicial del telfono o del emulador del telfono, haga clic o toque la flecha a la derecha en la parte superior derecha y vaya a la pgina de Configuracin y luego seleccione Tema. Un tema de Windows Phone 7 consiste en un fondo y un color de acento. Para el fondo se puede seleccionar Oscuro (texto claro sobre un fondo oscuro, que has estado viendo) o la luz (lo contrario). Seleccione el tema de la Luz, ejecute SilverlightHolaMundo otra vez, y expresar cierta satisfaccin que los colores del tema se aplican automticamente.

A pesar de que estos colores se aplican automticamente, no est atrapado con ellos en su aplicacin. Si desea que el texto se muestre en un color diferente, puede intentar establecer el atributo de primer plano en la etiqueta de TextBlock, por ejemplo:
Foreground="Blue"

Usted puede ponerlo en cualquier lugar de la etiqueta, siempre y cuando deje espacios a ambos lados. A medida que escribe este atributo, puedes encontrar una lista de colores pop-up. Silverlight soporta los 140 nombres de colores compatibles con numerosos navegadores, as como un bono 141a color, transparente. En un programa en el mundo real, usted querr poner a prueba los colores de encargo con los temas disponibles para que el texto no desaparezca misteriosamente o se vuelva difcil de leer.

Puntos y Pxeles
Otra caracterstica del TextBlock es que puede cambiar fcilmente es FontSize (Tamao de letra):
FontSize="36"

Pero, qu significa esto exactamente? Todas las dimensiones en Silverlight se encuentran en unidades de pxeles, y el FontSize no es una excepcin. Cuando se especifica 36, se obtiene una fuente que desde la parte superior de sus ascendentes en la parte inferior de sus descendentes mide aproximadamente 36 pxeles. Pgina 16

Pero las fuentes no son nunca tan sencillas. El TextBlock resultante realmente tiene una altura como 48 pxeles, alrededor del 33% ms alto que lo que el FontSize implicara. Este espacio adicional impide que las lneas sucesivas de texto se bloqueen. Tradicionalmente, los tamaos de fuente se expresan en unidades de puntos. En la tipografa clsica, es un punto muy cercano a 1/72nd pulgadas, pero en la tipografa digital, la cuestin es a menudo se supone que es exactamente 1/72nd pulgadas. Una fuente con un tamao de 72 puntos mide aproximadamente una pulgada de la parte superior de sus personajes hasta el fondo. (Digo "aproximadamente", porque el tamao de punto indica una altura de diseo tipogrfico, y es realmente el creador de la fuente que determina exactamente qu tan grande a los personajes de una fuente de 72 puntos debe ser.) Cmo convertir entre pxeles y puntos? Obviamente no se puede a excepcin de un dispositivo de salida en particular. A 600 puntos por pulgada (DPI) de la impresora, por ejemplo, el tipo de letra de 72 puntos ser de 600 pxeles de alto.

El XAP
Si se desplaza al directorio \ bin \ Debug del proyecto de Visual Studio SilverlightHolaMundo, encontrar un archivo llamado SilverlightHolaMundo.xap. Esto se conoce comnmente como un archivo XAP. Este es el archivo que se implementa en el telfono o el telfono emulador. El archivo XAP es un paquete de otros archivos, en el formato de compresin muy popular conocido como ZIP. Si cambia el nombre a SilverlightHolaMundo.xap por SilverlightHolaMundo.zip, puede ver el interior. Ver varios archivos de mapa de bits que forman parte del proyecto, un archivo XML, un archivo XAML, y un archivo de SilverlightHolaMundo.dll, que es el binario compilado de su programa.

Un programa XNA
El siguiente paso en el orden del da es un programa XNA que muestra un mensaje en el centro de la pantalla. Mientras que el texto a menudo prevalece en las aplicaciones de Silverlight, es menos comn en los juegos grficos. En los juegos, el texto es generalmente relegado a la descripcin de cmo funciona el juego o la visualizacin de la puntuacin, por lo que el concepto de un "hola, mundo" del programa no acaba de encajar en el paradigma de programacin XNA. De hecho, XNA ni siquiera tiene fuentes incorporadas. Se podra pensar que un programa XNA se ejecuta en el telfono puede hacer uso de las mismas fuentes nativas como los programas de Silverlight, pero esto no es as. Silverlight utiliza fuentes TrueType basadas en vectores y XNA no sabe nada acerca de conceptos tan exticos. En XNA, todo es un mapa de bits, incluidas las fuentes. Si desea utilizar una fuente en particular en el programa XNA, esa fuente debe estar integrada en el ejecutable como una coleccin de mapas de bits para cada carcter. XNA Game Studio (que est integrado en Visual Studio) hace que el proceso actual de incorporacin de fuentes muy fcil, pero plantea algunas cuestiones jurdicas espinoso. Usted no puede distribuir legalmente un programa XNA a menos que tambin se puede distribuir legalmente la fuente incorporada, y con la mayora de las fuentes distribuido con el propio Windows o aplicaciones de Windows, este no es el caso. En el men Archivo de Visual Studio, seleccione Nuevo y Proyecto. A la izquierda del cuadro de dilogo, seleccione Visual C # y XNA Game Studio 4.0. En el centro, seleccione Windows Phone juego (4.0). Seleccione una ubicacin y escriba un nombre de proyecto de XnaHolaMundo. Visual Studio crear dos proyectos, uno para el programa y el otro para el contenido del programa. Los programas de XNA por lo general contienen gran cantidad de contenidos, mapas de bits en su mayora y los modelos 3D, pero las fuentes tambin. Para agregar una fuente a este programa, haga clic en el proyecto de contenido (con la etiqueta "XnaHolaMundoContent (contenido)" y desde el men emergente y seleccione Agregar Pgina 17

nuevo elemento. Elija Sprite Font, dejar el nombre de archivo como SpriteFont1.spritefont, y haga clic en Agregar. La palabra "sprite" es comn en la programacin de juegos y por lo general se refiere a un pequeo mapa de bits que se pueden mover muy rpidamente, al igual que los sprites que se puede encontrar en un bosque encantado. En XNA, aunque las fuentes son los sprites. Vers SpriteFont1.spritefont aparecen en la lista de archivos del directorio de contenido, y usted puede editar una extensa coment archivo XML que describe la fuente.
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics"> <Asset Type="Graphics:FontDescription"> <FontName>Segoe UI Mono</FontName> <Size>14</Size> <Spacing>0</Spacing> <UseKerning>true</UseKerning> <Style>Regular</Style> <CharacterRegions> <CharacterRegion> <Start>&#32;</Start> <End>&#126;</End> </CharacterRegion> </CharacterRegions> </Asset> </XnaContent>

En su estado inicial, el proyecto XNAHolaMundo contiene dos archivos de cdigo C #: Program.cs y Game1.cs. La primera es muy simple y resulta ser irrelevante para Windows Phone 7 juegos! Una directiva de preprocesador permite a la clase del Programa de si un smbolo de Windows o Xbox est definido. Al compilar los programas de Windows de telfono, el smbolo WINDOWS_PHONE se define en su lugar. Para la mayora de los juegos pequeos, estar gastando todo su tiempo en el archivo Game1.cs. La clase GAME1 deriva de juego y en su estado prstino que define dos campos: los grficos y SpriteBatch. A los dos campos que quiero aadir tres ms:
namespace XnaHOlaMundo { public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; string text = "Hola, Windows Phone 7!"; SpriteFont segoe14; Vector2 textPosition; } }

Estos tres nuevos campos se limitan a indicar el texto que el programa mostrar, la fuente que utilizar para mostrarlo, y la posicin del texto en la pantalla. Esa posicin se especifica en pxeles coordenadas respecto a la esquina superior izquierda de la pantalla. La estructura Vector2 tiene dos campos denominados X e Y de tipo float. Para efectos de la performance, todos los valores de punto flotante en XNA son de precisin simple. (Silverlight es de doble precisin.) La estructura Vector2 se utiliza a menudo para los puntos de dos dimensiones, tamaos, e incluso vectores. Cuando el juego se ejecuta en el telfono, la clase GAME1 se crea una instancia y el constructor GAME1 se ejecuta. Este cdigo estndar es siempre para usted:
public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; TargetElapsedTime = TimeSpan.FromTicks(333333); }

La primera sentencia inicializa el campo de los grficos. En la segunda declaracin, de contenidos es una caracterstica de juego del tipo ContentManager y RootDirectory es una caracterstica de esa clase. Al establecer Pgina 18

esta propiedad en "Content" es coherente con el contenido de la gua que se est almacenando la fuente 14point Segoe. La tercera declaracin establece un tiempo de bucle de juego del programa, que regula el ritmo al que el programa actualiza la pantalla de vdeo. El telfono de Windows 7 pantalla se actualiza a 30 cuadros por segundo. Despus de GAME1 se crea una instancia, un mtodo de ejecucin se denomina en la instancia GAME1, y el juego inicia la clase base del proceso de puesta en marcha del juego. Uno de los primeros pasos es una llamada al mtodo Initialize, que un derivado del juego puede reemplazar. XNA Game Studio genera un mtodo de esqueleto:
protected override void Initialize() { base.Initialize(); }

El mtodo Initialize no es el lugar para cargar la pila u otros contenidos. Que viene un poco ms tarde, cuando la clase base llama al mtodo LoadContent.
protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); segoe14 = this.Content.Load<SpriteFont>("Segoe14"); Vector2 textSize = segoe14.MeasureString(text); Viewport viewport = this.GraphicsDevice.Viewport; textPosition = new Vector2((viewport.Width - textSize.X) / 2, (viewport.Height - textSize.Y) / 2); }

Sus mtodos que dibujan probablemente no contienen ningn cdigo cuestionable, es por lo general en el mtodo de actualizacin, donde se esconden los problemas. Evite las expresiones para participar en las clases. Estos siempre causan asignacin de memoria. Crear instancias de una estructura est muy bien, sin embargo, porque las instancias estructura se almacenan en la pila y no en el montn. (XNA utiliza estructuras en lugar de clases para muchos tipos de objetos que a menudo se deber crear en la actualizacin.) Sin embargo, las asignaciones del montn tambin pueden ocurrir sin explcita nuevas expresiones. Por ejemplo, la concatenacin de dos cadenas crea otra cadena en el montn. Si usted necesita para llevar a cabo la manipulacin de cadenas en la actualizacin, debe utilizar StringBuilder. Convenientemente, XNA proporciona mtodos para mostrar el texto con objetos StringBuilder En XnaHolaMundo, sin embargo, el mtodo de actualizacin es trivial. El texto mostrado por el programa se basa en un solo lugar. Todos los clculos necesarios ya se han realizado en el mtodo LoadContent. Por esa razn, el mtodo de actualizacin se quedar simplemente como XNA Game Studio originalmente lo cre:
protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); base.Update(gameTime); }

El cdigo por defecto se utiliza en la clase Gamepad esttica para comprobar si el hardware del telfono en concreto el botn Atrs ha sido presionado y que utiliza para salir del juego. Por ltimo, est el mtodo Draw. La versin creada para simplemente los colores de fondo con una luz azul:
protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); base.Draw(gameTime); }

El color se conoce como CornflowerBlue y ha alcanzado el estatus de icono en la comunidad de programacin XNA. Cuando ests desarrollando un programa de XNA, la apariencia de la pantalla azul de la luz es muy reconfortante porque significa que el programa tiene por lo menos llegado tan lejos como Draw. Pero si quieren conservar el poder en las pantallas OLED, que desea ir con fondos oscuros. En mi versin revisada, me he comprometido mediante el establecimiento de los antecedentes de un azul ms oscuro. Al igual Pgina 19

que en Silverlight, XNA apoya los 140 colores que han llegado a ser considerados como los estndares. El texto es de color blanco:
protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.Navy); spriteBatch.Begin(); spriteBatch.DrawString(segoe14, text, textPosition, Color.White); spriteBatch.End(); base.Draw(gameTime); }

Sprites sale en la pantalla al ser incluido en un objeto SpriteBatch, que se cre durante la llamada a LoadContent. Entre las llamadas al inicio y de finalizacin no puede haber varias llamadas a DrawString para dibujar texto y Draw para dibujar mapas de bits. Esas son las nicas opciones. Este particular por las referencias DrawString llamar a la fuente, el texto a mostrar, la posicin de la esquina superior izquierda del texto relativa a la esquina superior izquierda de la pantalla, y el color. Y aqu est:

Ilustracin 1: Resultado de la ejecucin de la aplicacin XNA

Oh, qu interesante! De forma predeterminada, los programas de Silverlight surgen en el modo de retrato, pero los programas de XNA llegar en modo horizontal. Vamos a encender el telfono o el emulador de lado:

Ejemplos
A continuacin se muestra el ejemplo completo del que hemos hablado en el captulo: El MainPage.xaml:
<phone:PhoneApplicationPage x:Class="SilverlightHelloPhone.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Pgina 20

xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" shell:SystemTray.IsVisible="True"> <!--LayoutRoot contains the root grid where all other page content is placed--> <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!--TitlePanel contains the name of the application and page title--> <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> <TextBlock x:Name="ApplicationTitle" Text="SILVERLIGHT HOLA" Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock x:Name="PageTitle" Text="pgina principal" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel> <!--ContentPanel - place additional content here--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <TextBlock Text="HOLA, Windows Phone 7!" HorizontalAlignment="Center" VerticalAlignment="Center" /> </Grid> </Grid> <!-- Sample code showing usage of ApplicationBar <phone:PhoneApplicationPage.ApplicationBar> <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> <shell:ApplicationBarIconButton x:Name="appbar_button1" IconUri="/Images/appbar_button1.png" Text="Button 1"></shell:ApplicationBarIconButton> <shell:ApplicationBarIconButton x:Name="appbar_button2" IconUri="/Images/appbar_button2.png" Text="Button 2"></shell:ApplicationBarIconButton> <shell:ApplicationBar.MenuItems> <shell:ApplicationBarMenuItem x:Name="menuItem1" Text="MenuItem 1"></shell:ApplicationBarMenuItem> <shell:ApplicationBarMenuItem x:Name="menuItem2" Text="MenuItem 2"></shell:ApplicationBarMenuItem> </shell:ApplicationBar.MenuItems> </shell:ApplicationBar> </phone:PhoneApplicationPage.ApplicationBar> --> </phone:PhoneApplicationPage>

El App.xaml:
<Application x:Class="SilverlightHelloPhone.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"> <!--Application Resources--> <Application.Resources> </Application.Resources> <Application.ApplicationLifetimeObjects> <!--Required object that handles lifetime events for the application--> <shell:PhoneApplicationService Launching="Application_Launching" Closing="Application_Closing" Activated="Application_Activated" Deactivated="Application_Deactivated"/> </Application.ApplicationLifetimeObjects> </Application>

El archive de cdigo asociado a App.xaml:


using System; using System.Collections.Generic;

Pgina 21

using using using using using using using using using using using using

System.Linq; System.Net; System.Windows; System.Windows.Controls; System.Windows.Documents; System.Windows.Input; System.Windows.Media; System.Windows.Media.Animation; System.Windows.Navigation; System.Windows.Shapes; Microsoft.Phone.Controls; Microsoft.Phone.Shell;

namespace SilverlightHelloPhone { public partial class App : Application { // Easy access to the root frame public PhoneApplicationFrame RootFrame { get; private set; } // Constructor public App() { // Global handler for uncaught exceptions. // Note that exceptions thrown by ApplicationBarItem.Click will not get caught here. UnhandledException += Application_UnhandledException; // Standard Silverlight initialization InitializeComponent(); // Phone-specific initialization InitializePhoneApplication(); } // Code to execute when the application is launching (eg, from Start) // This code will not execute when the application is reactivated private void Application_Launching(object sender, LaunchingEventArgs e) { } // Code to execute when the application is activated (brought to foreground) // This code will not execute when the application is first launched private void Application_Activated(object sender, ActivatedEventArgs e) { } // Code to execute when the application is deactivated (sent to background) // This code will not execute when the application is closing private void Application_Deactivated(object sender, DeactivatedEventArgs e) { } // Code to execute when the application is closing (eg, user hit Back) // This code will not execute when the application is deactivated private void Application_Closing(object sender, ClosingEventArgs e) { } // Code to execute if a navigation fails void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e) { if (System.Diagnostics.Debugger.IsAttached) { // A navigation has failed; break into the debugger System.Diagnostics.Debugger.Break(); } } // Code to execute on Unhandled Exceptions private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) { if (System.Diagnostics.Debugger.IsAttached) { // An unhandled exception has occurred; break into the debugger System.Diagnostics.Debugger.Break(); } } #region Phone application initialization

Pgina 22

// Avoid double-initialization private bool phoneApplicationInitialized = false; // Do not add any additional code to this method private void InitializePhoneApplication() { if (phoneApplicationInitialized) return; // Create the frame but don't set it as RootVisual yet; this allows the splash // screen to remain active until the application is ready to render. RootFrame = new PhoneApplicationFrame(); RootFrame.Navigated += CompleteInitializePhoneApplication; // Handle navigation failures RootFrame.NavigationFailed += RootFrame_NavigationFailed; // Ensure we don't initialize again phoneApplicationInitialized = true; } // Do not add any additional code to this method private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e) { // Set the root visual to allow the application to render if (RootVisual != RootFrame) RootVisual = RootFrame; // Remove this handler since it is no longer needed RootFrame.Navigated -= CompleteInitializePhoneApplication; } #endregion } }

En las propiedades del proyecto, el archivo WMAppManifest.xml:


<?xml version="1.0" encoding="utf-8"?> <Deployment xmlns="http://schemas.microsoft.com/windowsphone/2009/deployment" AppPlatformVersion="7.0"> <App xmlns="" ProductID="{90f5804d-69dc-4526-9a7e-0c90a9069d0a}" Title="Silverlight Hola Phone" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal" Author="SilverlightHolaPhone author" Description="Sample description" Publisher="SilverlightHelloPhone"> <IconPath IsRelative="true" IsResource="false">ApplicationIcon.png</IconPath> <Capabilities> <Capability Name="ID_CAP_NETWORKING" /> <Capability Name="ID_CAP_LOCATION" /> <Capability Name="ID_CAP_SENSORS" /> <Capability Name="ID_CAP_MICROPHONE" /> <Capability Name="ID_CAP_MEDIALIB" /> <Capability Name="ID_CAP_GAMERSERVICES" /> <Capability Name="ID_CAP_PHONEDIALER" /> <Capability Name="ID_CAP_PUSH_NOTIFICATION" /> <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" /> </Capabilities> <Tasks> <DefaultTask Name ="_default" NavigationPage="MainPage.xaml"/> </Tasks> <Tokens> <PrimaryToken TokenID="SilverlightHolaPhoneToken" TaskName="_default"> <TemplateType5> <BackgroundImageURI IsRelative="true" IsResource="false">Background.png</BackgroundImageURI> <Count>0</Count> <Title>SilverlightHOLAPhone</Title> </TemplateType5> </PrimaryToken> </Tokens> </App> </Deployment>

Pgina 23

You might also like