Anda di halaman 1dari 12

Creando la interfaz de usuario de Windows

Phone (XAML)
Creando la interfaz de usuario de Windows Phone
(XAML)
Este artculo es una traduccin del artculo original encontrado en:
http://create.msdn.com/en-
US/education/quickstarts/Creating_the_Windos_!hone_User_"nter#ace_$%&'()*$%+.
,ormalmente- se utili.a Sil/erlight para crear aplicaciones de Windos !hone 0
',( para crear 1uegos de Windos !hone. '()* es el lengua1e declarati/o
utili.ado en Sil/erlight para crear inter#aces de usuario- por lo tanto en W!2 es
utili.ado para crear las aplicaciones de inter#a. de usuario en el tel3#ono- tales
como- controles- #ormas- te4to 0 otros contenidos presentados en la pantalla. Si
est5s #amiliari.ado con la programacin e6- t7 puede pensar en '()* como
lo m5s parecido a 89)*- pero m5s potente. (l igual que 89)*- '()* se
compone de elementos 0 atri6utos. Sin em6argo- '()* est5 6asado en ')* 0
por lo tanto de6es seguir las reglas de ')*.
97 podras preguntarte- :;!or qu3 me importa '()* si slo /o0 a utili.ar
herramientas como <isual Studio o E4pression =lend para crear inter#aces de
usuario>: ( pesar de que e4isten herramientas que aportan 6ene?cio- siempre
/as a querer pasar por alto el entender o modi?car el cdigo '()*. !or otra
parte- es a /eces m5s #5cil tra6a1ar el cdigo de inter#a. de usuario a mano-
cuando se desea tener un control del mismo- o simplemente- si deseas sa6er lo
que est5 ocurriendo en 3l.
Este tutorial contiene las siguientes secciones:
E1emplo '()*
'()* es slo el cdigo de procedimiento @slo es m5s #5cilA
!ropiedades
'()* 0 el 5r6ol /isual
)5s que una inter#a. de usuario est5tica
Ejemplo XAML

*o siguiente es un simple e1emplo en cdigo '()*- que permite crear un 6otn
XAML
BCrid 4:,ameD:Content!anel: Crid.EoD:F: )arginD:F%-G-F%-G:H
B=utton 8eightD:2%: WidthD:FIG: ContentD:Click )e: /H
B/ CridH

Cuando se e1ecuta la aplicacin de6e aparecer algo como esto:


El 6otn se especi?ca mediante el elemento <Button! El ancho 0 la altura
de los atri6utos especi?can el tamaJo del 6otn. El <"rid se genera cuando
se crea una nue/a aplicacin de Windos !hone en <isual Studio- 0 se utili.a
para colocar los o61etos. !ara aprender m5s acerca del diseJo en Sil/erlight-
consulta Kistri6ucin en la pantalla.
!uedes utili.ar <isual Studio para generar el cdigo '()*. !or e1emplo- puedes
arrastrar un 6otn de la ca1a de herramientas a la super?cie de diseJo.
( continuacin se muestra el cdigo '()* que <isual Studio puede generar. @El
'()* puede ser distintoA.
XAML
BCrid 4:,ameD:ContentCrid: Crid.EoD:F:H
B=utton ContentD:=utton: 9itleD:2%: 8ori.ontal(lignmentD:*e#t:
)arginD:FL%-%2M-G-G: ,ameD:6uttonF: <ertical(lignmentD:9op: WidthD:FIG: /H
B/CridH


9en en cuenta que <isual Studio agrega algunos atri6utos adicionales- como
8ori.ontal(lignment @(lineacin hori.ontalA 0 el )argin @)argenA- al agregar el
6otn. Este e4tra no de6era ser un incon/eniente si tus necesidades son mu0
espec?cas. Ca6e destacar- que puedes cam6iar estos atri6utos utili.ando la
inter#a. de usuario de <isual Studio- pero en algunos casos- es posi6le que
pre?eras slo el '()* directamente para editar.

Una de las me1ores cosas acerca del uso de un lengua1e declarati/o como
'()*- est5 en tener una clara separacin entre el marcado que representa la
inter#a. de usuario 0 el cdigo que hace en la aplicacin. !or e1emplo- un
diseJador podra tra6a1ar en el diseJo de una inter#a. de usuario 0 luego los
desarrolladores aJadir el cdigo de procedimiento en el '()*. "ncluso si el
diseJador 0 el desarrollador son la misma persona @0a que a menudo lo sonA-
puedes mantener tu inter#a. de usuario en los archi/os de '()* @.4amlA 0 el
cdigo de procedimiento en archi/os de cdigo su60acente @.cs 0 ./6A.

'()* es s#lo el $#di%o de pro$edimiento
Elementos '()*- como <Button&' son el equi/alente a crear instancias de
o61etos en el cdigo de procedimiento. !or e1emplo- considera el siguiente
'()*:
XAML
BCrid 4:,ameD:Content!anel: Crid.EoD:F: )arginD:F%-G-F%-G:H
B=utton 8eightD:2%: WidthD:FIG: ContentD:Click )e: /H
B/ CridH

( continuacin se muestra como el '()* puede ser escrito tanto en CN como
en <isual =asic:
C#
/ /"niciali.ar el 6otn
=utton m0=utton D ne =utton @AO
/ /Esta6lecer sus propiedades
m0=utton.Width D FIGO
m0=utton.8eight D 2%O
m0=utton.Content D :Click )e:O
/ /(socia al 5r6ol /isual- espec?camente como un hi1o de el o61eto Crid
/ /@llamada PContent!anelQA. En otras pala6ras- la posicin del 6otn en la inter#a. de usuario.
Content!anel.Children.(dd @m0=uttonAO
Visual Basic
P"niciar el 6otn
Kim m0=utton (s ,e =utton @A
PEsta6lecer sus propiedades
m0=utton.Width D FIG
m0=utton.8eight D 2%
m0=utton.Content D :Click )e:
P(sociar al 5r6ol /isual- espec?camente como un hi1o de el o61eto Crid P @llamada
PContent!anelQA. En otras pala6ras- la posicin del
P6otn en la inter#a. de usuario.
Content!anel.Children.(dd @m0=uttonA

!ara la "nter#a. de Usuario- '()* tiene la /enta1a de ser m5s #5cil de leer 0 ser
aun m5s compacto que el cdigo de procedimiento. Sin em6argo- a /eces es
necesario el uso de cdigo de procedimiento para crear la inter#a. de usuario
de #orma din5mica.
Propiedades
*os siguientes- son dos maneras de especi?car los /alores de la propiedad en
'()*.
(tri6uto de la sinta4is de elementos
!ropiedad de la sinta4is de elementos
El elemento de sinta4is del atri6uto- es el atributo = "valor", sinta4is que se ha
/isto en los e1emplos anteriores 0 que podras estar #amiliari.ado con 3l en
89)*. En el siguiente e1emplo- es creado un rect5ngulo ro1o. Su relleno es un
atri6uto que se esta6lece en un nom6re de color prede?nido.

XAML
BEectangle RillD:Eed: /H
(lternati/amente- puedes especi?car el /alor del color- utili.ando la sinta4is de
elementos de propiedad.
XAML
BEectangleH
BEectangle.RillH
BSolidColor=rush ColorD:Eed: /H
B/ Eectangle.RillH
B/EectangleH
En este caso- de6es especi?car e4plcitamente el SolidColor=rush @!incel de
color slidoA- el cual es el o61eto de tipo requerido por el relleno de la
propiedad- no slo la cadena :Eed:. ( partir de este e1emplo- es posi6le deducir
que la sinta4is de elementos de propiedad es slo una manera detallada de
hacer lo mismo. Sin em6argo- no todos los /alores de las propiedades se
pueden especi?car mediante una cadena simple de atri6utos. !or e1emplo- si
necesitas especi?car /arias propiedades de un o61eto que se utili.a como el
/alor de una propiedad- es pro6a6le que tengas que utili.ar la sinta4is de
elementos de la propiedad. En el siguiente e1emplo se crea un rect5ngulo- pero
en lugar de un relleno simple de color ro1o- se utili.ar5 un degradado.
XAML

B- Este rect5ngulo se pinta con un degradado lineal diagonal. -H
BEectangle WidthD:%GG: 8eightD:%GG:H
BEectangle.RillH
B*inearCradient=rush Start!ointD:G-G: End!ointD:F-F:H
BCradientStop ColorD:Sello: TUsetD:G.G: /H
BCradientStop ColorD:Eed: TUsetD:G.%L: /H
BCradientStop ColorD:=lue: TUsetD:G.2L: /H
BCradientStop ColorD:*imeCreen: TUsetD:F.G: /H
B/ *inearCradient=rushH
B/ Eectangle.RillH
B/ Eectangle H

Cuando es e1ecutada la aplicacin se /er5 algo como esto:


Como puedes /er- el relleno de la propiedad- utili.a un o61eto comple1o
@*inearCradient=rushA para crear el gradiente. En casos como estos- es
necesario utili.ar la sinta4is del elemento de la propiedad- en lugar de
simplemente especi?car el /alor como una cadena asignada a un atri6uto.
'()* 0 el 5r6ol /isual
En '()*- se tienen elementos @tales como <Button 0 <"rid) que pueden
tener otros elementos @nodosA por de6a1o de ellos @los hi1osA. Esta relacin
padre / hi1o especi?can o61etos que se colocan en la pantalla 0 responden a
e/entos iniciados por el usuario. Consideremos el siguiente e1emplo.
Cuando se e1ecuta la aplicacin- se /er5 algo como esto:
XAML
BCrid 4:,ameD:Content!anel: =ackgroundD:Eed: Crid.EoD:F: )arginD:F%-G-F%-G:H
BStack!anel )arginD:%G: =ackgroundD:=lue:H
,ameD:?rst9e4t=lock: B9e4t=lock RontSi.eD:MG:HRirst 9e4t=lockB/ 9e4t=lockH
,ameD:second9e4t=lock: B9e4t=lock RontSi.eD:MG:H Second 9e4t=lock B/
9e4t=lockH
,ameD:third9e4t=lock: B9e4t=lock RontSi.eD:MG:H 9hird 9e4t=lock B/
9e4t=lockH
B/ Stack!anelH
B/ CridH
El Stack!anel a.ul est5 contenido dentro de un Crid ro1o. El elemento 9e4t=lock
est5 contenido dentro del Stack!anel @el elementos 9e4t=lock es hi1o del
Stack!anelA. (dem5s- los elementos 9e4t=lock est5n apilados uno encima del
otro- en el orden en que se declaran en el '()*. El siguiente diagrama de 5r6ol
muestra las relaciones entre los elementos.
(dem5s de determinar cmo se presenta el contenido- el 5r6ol /isual tam6i3n
puede tener un e#ecto de cmo se procesan los e/entos. )uchos e/entos
tpicos acontecidos en el 5r6ol @llamados e/entos enrutadosA :6ur6u1a:. !or
e1emplo- puedes conectar un controlador de e/entos al Stack!anel que controla
el 6otn i.quierdo del ratn @el e/ento )ouse*e#t=uttonKonA.
El siguiente '()* muestra como agregar un )ouse*e#t=uttonKon a un
controlador de e/entos denominado common)ouse8andler en el Stack!anel.
XAML
BCrid =ackgroundD:Eed: 4:,ameD:Content!anel: Crid.EoD:F: )arginD:F%-G-F%-G:H
BStack!anel )arginD:%G: =ackgroundD:=lue:
)ouse*e#t=uttonKonD:common)ouse8andler:H
B9e4t=lock ,ameD:?rst9e4t=lock: RontSi.eD:MG: HRirst 9e4t=lockB/9e4t=lockH
B9e4t=lock ,ameD:second9e4t=lock: RontSi.eD:MG: HSecond
9e4t=lockB/9e4t=lockH
B9e4t=lock ,ameD:third9e4t=lock: RontSi.eD:MG: H9hird 9e4t=lockB/9e4t=lockH
B/ Stack!anelH
B/ CridH


( continuacin se muestra el cdigo de procedimiento para colocar el e/ento:




C#

pri/ate /oid common)ouse8andler @o61ect sender- EoutedE/ent(rgs eA
V
RrameorkElement #eSource D e.TriginalSource as RrameorkElementO
sitch @#eSource.,ameA
V
case :?rst9e4t=lock::
?rst9e4t=lock.9e4t D ?rst9e4t=lock.9e4t W XClickY:O
6reakO
case :second9e4t=lock::
second9e4t=lock.9e4t D second9e4t=lock.9e4t W XClickY:O
6reakO
case :third9e4t=lock::
third9e4t=lock.9e4t D third9e4t=lock.9e4t W XClickY:O
6reakO
Z
Z

Visual Basic

!ri/ate Su6 common)ouse8andler @=0<al sender (s S0stem.T61ect- _
=0<al e (s S0stem.Windos."nput.)ouse=uttonE/ent(rgsA
Kim #eSource Como RrameorkElement e.TriginalSource D
Select case #eSource.,ame
Case :?rst9e4t=lock:
?rst9e4t=lock.9e4t D ?rst9e4t=lock.9e4t [ :ClickY:
Case :second9e4t=lock:
second9e4t=lock.9e4t D second9e4t=lock.9e4t [ :ClickY:
Case :third9e4t=lock:
third9e4t=lock.9e4t D third9e4t=lock.9e4t [ :ClickY:
End Select
End Su6

!ara pro6ar este e1emplo- ha. clic en el 9e4t=lock. Cuando esto sucede-
9e4t=lock es capturado- 0 se propaga hasta su elemento padre @el Stack!anelA-
que a su /e. controla el e/ento.

El siguiente diagrama muestra como el e/ento se propaga hasta el 5r6ol:

F. El usuario hace clic en 9e4t=lock.
%. El e/ento se propaga hasta el elemento primario.
M. \ 0 siguen las 6ur6u1as hasta el 5r6ol.
Kado que el e/ento contin7a hasta el 5r6ol- puede :escuchar: al e/ento
)ouse*e#t=uttonKon en el Crid.
M(s )ue una interfaz de usuario est(ti$a
97 puedes hacer algo m5s que la e4hi6icin de una inter#a. de usuario est5tica
con '()*. !uedes crear animaciones- incrustar /ideos 0 enla.ar datos
solamente usando el lengua1e de marcacin. (prender5s m5s acerca del uso
del '()* en otros tutoriales- sin em6argo- he aqu un e1emplo de una
animacin simple en cdigo '()*. !ara pro6ar este e1emplo- ha. clic en el
rect5ngulo para poder /isuali.ar el e#ecto.
XAML

BStack!anel =ackgroundD:NRKRLEI:H
BStack!anel.EesourcesH
BStor06oard 4:,ameD:m0Stor06oard:H
BKou6le(nimationUsing]e0Rrames
Stor06oard.9arget,ameD:m0Eectangle:
Stor06oard.9arget!ropert0D:8eight:H
BY^ Este ]e0Rrame resta6lece la animacin
con un /alor de @MGA al comien.o de la animacin^H
B*inearKou6le]e0Rrame <alueD:MG: ]e09imeD:G:G:G: /H
BY_Esta animacin se utili.a para crear aceleracin. El
SplineKou6le]e0Rramecrea una
animacin que comien.a lenta 0 luego acelera. El rect5ngulo :cae:^H
BSplineKou6le]e0Rrame ]e0SplineD:G-G F-G: <alueD:MGG:
]e09imeD:G:G:G.&: /H
BY^ Esta animacin spline crea el :re6ote: en el ?nal-
donde el rect5ngulo acorta sulongitud r5pidamente al principio 0
luego #rena 0 se detiene.^H
BSplineKou6le]e0Rrame ]e0SplineD:G.FG- G.%F G.GG- F.G: <alueD:%LG:
]e09imeD:G:G:F.L: /H
B/Kou6le(nimationUsing]e0RramesH
B/Stor06oardH
B/Stack!anel.EesourcesH
BEectangle 4:,ameD:m0Eectangle: )ouse*e#t=uttonKonD:)ouse_Clicked: RillD:=lue:
WidthD:%GG: 8eightD:MG: /H
B/Stack!anelH
C#
// Cuando el usuario hace clic en el rect5ngulo- la animacin comien.a.
pri/ate /oid )ouse_Clicked@o61ect sender- )ouseE/ent(rgs eA
V
m0Stor06oard.=egin@AO
Z
Visual Basic
PCuando el usuario hace clic en el rect5ngulo- la animacin comien.a.
!ri/ate Su6 )ouse_Clicked@=0<al sender (s T61ect- =0<al e (s )ouseE/ent(rgsA
m0Stor06oard.=egin
End Su6
Este es un e1emplo del uso de '()* para especi?car el comportamiento de los
contenidos en el lugar del diseJo o de otros tipos est5ticos de inter#aces de
usuario. El elemento Stor06oard de?ne algunas propiedades generales de la
animacin- tal como qu3 o61eto ser5 animado. *os elementos hi1os de
Stor06oard- como *inearKou6le]e0Rrame- especi?ca cmo se e1ecuta la
animacin. !ara o6tener m5s in#ormacin so6re animaciones- consulta

Anda mungkin juga menyukai