Ilide - Info C PR
Ilide - Info C PR
Ilide - Info C PR
Introducción
a WPF y XAML
WPF presenta una nueva orma en la que podemos crear
interaces de usuario para nuestras aplicaciones gráfcas. Pero
no es solamente una nueva manera de hacer lo mismo: es un
ramework que permite tomar ventaja del hardware y llevar
a cabo interaces modernas y avanzadas que serían diíciles
de construir con las técnicas tradicionales. En este capítulo
analizamos los detalles undamentales para entender los
alcances de WPF y XAML en nuestros desarrollos.
▼ Entender WPF
WPF .......................166
....................... 166 ▼ Primera aplicación WPF........
........194
194
Arquitectura
Arquitectura de WPF.........
...................
............
.. 167
Entenderr los contene
Entende contenedores
dores.........
.............
.... 169 ▼ Resumen.................................197
Resumen.................................197
Entender WPF
Con la versión 3.0 de .NET se introdujo WPF.
WPF. Las herramientas
tradicionales uncionan muy bien si únicamente deseamos construir
aplicaciones que usan una orma con varios controles, pero que no
proveen uncionalidades extra al usuario. Si queremos construir una
interaz de usuario avanzada, con muchos elementos interactivos, es
necesario recurrir a dierentes tecnologías, como GDI+ y DirectX. El
problema reside en que estas no se encuentran
directamente relacionadas entre sí, lo que complica
el desarrollo de la interaz.
XAML NOS PERMITE Microsot estaba consciente de las limitaciones
REALIZAR LA del modelo anterior para la creación de interaces
y de la problemática para poder crear el tipo de
DEFINICIÓN DE LA interaz que requieren las nuevas aplicaciones. Por
INTERFAZ DE USUARIO esta razón, decidió crear WPF, sigla de Windows
Presentation Foundation. Se trata del ramework
que Microsot está recomendando para las nuevas
aplicaciones tanto de escritorio, Silverlight o para
dispositivos móviles. Con WPF,
WPF, todo lo que necesitamos para construir
interaces de usuario avanzadas queda unifcado dentro de un solo
ramework. Con él mismo podemos trabajar con controles, gráfcas
gr áfcas 2D y
3D, video, etc. Una de las ventajas que orece WPF es el uso de estilos y
templates en los controles, con lo cual podemos cambiar el aspecto de la
aplicación de modo muy rápido y sencillo.
En WPF se busca llevar a cabo una separación entre la orma en que
luce la aplicación y la lógica empleada para controlar dicha aplicación.
Para lograrlo, se hace uso de XAML. XAML nos permite defnir la interaz
de usuario; los programadores que trabajan con aplicaciones web lo
encontrarán muy ácil de utilizar. La interaz defnida con XAML es,
entonces, controlada con el ramework de WPF mediante cualquiera de
los lenguajes .NET;
.NET; en nuestro caso, C#.
XAML está basado en XML y es un lenguaje declarativo. Con él
podemos defnir y especifcar características para clases con una
sintaxis basada en XML. Este nos permite hacer cosas como declarar
variables o defnir propiedades. No es posible defnir la lógica del
programa con XAML, pero al poder establecer las características
de las clases, lo usamos para defnir la interaz de usuario y los
www.redusers .com
C# AVANZADO 167
167
Arquitectura
Arquitectura de WPF
WPF
Debemos saber que la arquitectura que cor responde a WPF
es sencilla, ya que está constituida por dierentes assemblies.
Estos assemblies pueden ser clasifcados en tres grupos: la capa
administrada, la capa no administrada y las APIs centrales.
La unción de la capa administrada es dar sustento al ramework de
WPF y llevar a cabo la comunicación con la capa no administrada. El
assembly más importante de esta capa es PresentationFramework.dll, cuya
unción es crear los elementos de alto nivel que usaremos para defnir
la interaz de usuario. Estos elementos son los paneles, los controles,
las ventanas, etc. Otro assembly importante es PresentationCore.dll , que
contiene los tipos base más importantes a partir de los cuales se crean
los controles y las fguras en PresentationFramework.dll; uno de estos tipos
es UIElement. Un tercer assembly que debemos conocer es WindowsBase.
dll, que también contiene elementos importantes, cuya característica es
poder ser utilizados por auera del ambiente de WPF.
WPF.
www. redusers.com
168
168 5. INTRODUCCIÓN A WPF Y XAML
Capa Administrada
Capa no Administrada
Direct3D CLR
Figura 1. En esta
est a figura podemos
po demos observ
o bservar
ar un
diagrama básico de la forma en que está compuesta
la arquitectura que corresponde a WPF
WPF..
Los paneles
Los paneles son utilizados como herramienta principal para el
diseño de la interaz gráfca de nuestra aplicación. Por medio de ellos
podemos colocar los dierentes controles en las posiciones en que
sean necesarios para la interaces. Hay distintos t ipos de paneles, y
también es importante conocer cómo uncionan para decidir cuál es
el mejor para nuestra interaz en particular.
El mejor modo de entender cómo uncionan los paneles es
programándolos y experimentando con ellos. Para esto, crearemos un
programa WPF.
WPF. Iniciamos Visual Studio 2010 y generamos un proyecto
nuevo de C#. Aparece una ventana que muestra los dierentes tipos de
proyectos disponibles; allí seleccionamos WPF Application y le damos
GRÁFICAS VECTORIALES
Debemos tener en cuenta que las gráficas vectoriales tienen la ventaja de no perder calidad sin impor-
tar la cantidad de acercamiento que se les dé. La imagen no se guarda en píxeles, sino que se guarda
la información geométrica de los objetos que la componen. Al tener la información geométrica, es
posible dibujar en cualquier escala, siempre con la mejor calidad.
www. redusers.com
170
170 5. INTRODUCCIÓN A WPF Y XAML
Figura 2. Debe-
mos seleccionar
la Aplicación
WPF para crear
el proyecto que
usaremos en
este capítulo.
GridPanel
Es importante tener en cuenta que empezaremos con el panel más
sencillo, conocido como Grid, que unciona como una matriz o malla
en la que tenemos celdas. Una v ez defnida la cantidad de renglones
y columnas, procedemos a indicar el contenido de cada celda y, de
esta orma, ensamblamos la interaz de usuario.
Empecemos utilizando Grid de su manera más sencilla; para esto
colocamos el siguiente código XAML en la aplicación:
<Window x:Class=”Grid.MainWindow”
xmlns=”http://schemas.microso
xmlns=”http://schemas.microsot.com/winx/2006/
t.com/winx/2006/xaml/prese
xaml/presentation”
ntation”
xmlns:x=”http://schemas.micros
xmlns:x=”http://schemas.microsot.com/winx/
ot.com/winx/2006/xaml”
2006/xaml”
Title=”MainWindow” Height=”350” Width=”525
Width=”525”>
”>
<Grid>
<Grid.RowDefnitions>
<RowDefnition/>
<RowDefnition/>
<RowDefnition/>
</Grid.RowDefnitions>
<Grid.ColumnDefnitions>
<ColumnDefnition/>
<ColumnDefnition/>
</Grid.ColumnDefnitions>
Tengamos presente que, en forma predeterminada, la unidad con la que se colocan las dimensiones
de la ventana son los píxeles, tomados con 96 píxeles por pulgada. También es posible colocar las
unidades en pulgadas, centímetros o también puntos. Para hacer uso de estas opciones, simplemen-
te, después del valor, ponemos in , cm o pt , respectivamente.
www. redusers.com
172
172 5. INTRODUCCIÓN A WPF Y XAML
www. redusers.com
174
174 5. INTRODUCCIÓN A WPF Y XAML
<Window x:Class=”Grid.MainWindow”
xmlns=”http://schemas.microso
xmlns=”http://schemas.microsot.com/winx/2006/
t.com/winx/2006/xaml/prese
xaml/presentation”
ntation”
xmlns:x=”http://schemas.micros
xmlns:x=”http://schemas.microsot.com/winx/
ot.com/winx/2006/xaml”
2006/xaml”
Title=”MainWindow” Height=”150” Width=”525
Width=”525”>
”>
<Grid>
<Grid.RowDefnitions>
<RowDefnition/>
<RowDefnition/>
<RowDefnition/>
</Grid.RowDefnitions>
<Grid.ColumnDefnitions>
<ColumnDefnition/>
<ColumnDefnition/>
</Grid.ColumnDefnitions>
StackPanel
El siguiente panel que vamos a utilizar se conoce como StackPanel
y unciona, eectivamente, como un stack. Allí podemos adicionar
cualquier cantidad de elementos, cada uno de los cuales se agrega al
stack después del último. Los elementos se colocan uno después del
otro, lo que previene que se encimen entre sí. Es posible colocar en su
interior cualquier elemento válido de WPF.
Cuando usamos StackPanel podemos seleccionar entre dos
orientaciones: Horizontal y Vertical. Si seleccionamos y usamos
Horizontal , los elementos se irán agregando de izquierda a derecha,
mientras que con Vertical, lo harán de arriba hacia abajo. La
orientación se controla por medio de la propiedad Orientation .
Veamos el siguiente código que ejemplifca el uso de StackPanel:
<Window x:Class=”StackPanel.MainWindow”
xmlns=”http://schemas.microsot.
xmlns=”http://schemas.microsot.com/winx/2006/x
com/winx/2006/xaml/presen
aml/presentation”
tation”
xmlns:x=”http://schemas.microso
xmlns:x=”http://schemas.microsot.com/winx/200
t.com/winx/2006/xaml”
6/xaml”
Title=”MainWindow” Height=”350” Width=”410”
Width=”410”>>
<StackPanel Orientation=”Horizo
Orientation=”Horizontal”>
ntal”>
<Border Background=”AliceBlue”>
<TextBlock Text=”Hola”/>
</Border>
<Border Background=”AntiqueWhite” Padding=”30”>
<TextBlock Text=”Mundo”/>
</Border>
<Border Background=”Aqua”>
<TextBlock
<TextBlock Text=”Hello”/>
</Border>
<Border Background=”Aquamarine” Padding=”10,20,50,0”>
<TextBl
<TextBlock
ock Text=”
Text=”World”/>
World”/>
www. redusers.com
176
176 5. INTRODUCCIÓN A WPF Y XAML
</Border>
<Border Background=”Azure” >
<TextBlock
<TextBlock Text=”---
Text=”--- Hola ---”/>
</Border>
<Border Background=”Beige”>
<TextBlock
<TextBlock Text=”---
Text=”--- Mundo ---”/>
</Border>
</StackPanel>
</Window>
En este ejemplo hemos indicado un Padding de 30, lo que debe dar una
distancia mínima de 30 píxeles a partir del mensaje “Mundo” hasta los
límites del borde. Cuando se coloca un solo valor en el Padding, este se
usa para la parte superior, inerior, izquierda y derecha.
En el cuarto Border tenemos código ligeramente dierente:
PRONUNCIACIÓN DE XAML
Debemos tener en cuenta que la sigla XAML, tan conocida en la actualidad, puede pronunciarse
como una sola palabra o también letra por letra. Eso sí, consideremos que en el primer caso, debe
decirse “zammel ”. Cualquiera de las dos formas se considera correcta, aunque en algunos países
de Latinoamérica se da preferencia a nombrarla letra por letra. En este sentido es muy importante
conocer ambas formas de pronunciación por si nos encontramos con personas de habla inglesa. De
esta forma no nos sorprenderá oírlo nombrar de esa f orma.
WrapPanel
Otro panel que resulta ácil de utilizar es WrapPanel. Es similar al
anterior,, ya que los elementos se colocan uno después del otro. En el
anterior
StackPanel los elementos se van adicionando de orma indefnida, pero
en el WrapPanel, lo hacen cuando ya no hay
hay espacio en la ventana,
ventana, de
esta orma el elemento continúa en el siguiente renglón o columna.
WrapPanel también tiene orientación Horizontal y Vertical, las cuales se
controlan por medio de la propiedad Orientation. Para tener un poco más
de control sobre la orma en que se dibujan los elementos, lo mejor es
hacer uso de Padding; de esta manera, tenemos, al menos, un tamaño
mínimo garantizado en el área que corresponde a Border.
El código de una aplicación que usa WrapPanel es el siguiente:
www. redusers.com
178
178 5. INTRODUCCIÓN A WPF Y XAML
<Window x:Class=”WrapPanel.MainWindow”
xmlns=”http://schemas.microso
xmlns=”http://schemas.microsot.com/winx/2006/
t.com/winx/2006/xaml/prese
xaml/presentation”
ntation”
xmlns:x=”http://schemas.micros
xmlns:x=”http://schemas.microsot.com/winx/
ot.com/winx/2006/xaml”
2006/xaml”
Title=”MainWindow” Height=”350” Width=”525
Width=”525”>
”>
<WrapPanel Orientation=”Horiz
Orientation=”Horizontal”>
ontal”>
<Border Background=”AliceBlue”>
<TextBlock Text=”Hola”/>
</Border>
<Border Background=”AntiqueWhite” Padding=”30”>
<TextBlock Text=”Mundo”/>
</Border>
<Border Background=”Aqua”>
<TextBlock Text=”Hello”/>
</Border>
<Border Background=”Aquamarine” Padding=”10,20,50,0”>
<TextBlo
<TextBlock
ck Text=”
Text=”World”/>
World”/>
</Border>
<Border Background=”Azure” >
<TextBlock
<TextBlock Text=”---
Text=”--- Hola ---”/>
</Border>
<Border Background=”Beige”>
<TextBlock
<TextBlock Text=”---
Text=”--- Mundo ---”/>
</Border>
</WrapPanel>
</Window>
Es importante tener en cuenta que cuando estamos trabajando con WrapPanel y no colocamos
explícitamente la propiedad de Orientation, por default se toma el valor de Horizontal. Esto también
sucede con otros paneles que tienen propiedades de orientación. Este es un punto para tomar en
cuenta si nuestra aplicación tendrá una orientación ver tical.
DockPanel
El siguiente panel es conocido como DockPanel, y es más complicado
que los anteriores. Cuando vamos a utilizarlo, es necesario planifcar
correctamente la interaz, ya que puede ser un poco complicado prever
la orma en que aparecen los dierentes elementos en el panel.
Al colocar un elemento en el DockPanel, debemos considerar el espacio
que está libre. En él es posible colocar el elemento en la parte superior,
inerior,, derecha o izquierda. Una vez hecho esto, quedará un nuevo
inerior
espacio libre, en el que se ubicará el siguiente elemento, otra vez,
dependiendo de donde queramos colocarlo. Este proceso se repite hasta
que ya no tengamos más elementos para ubicar.
La orma de indicar dónde se colocará el elemento es por medio
de la propiedad Dock de DockPanel . Si deseamos que se coloque en la
parte superior del espacio libre, usamos el valor de Top , mientras que
para la parte inerior se utiliza Bottom. En caso de que el objeto deba
colocarse a la izquierda, debemos cuidar de poner el valor de Let, y
para hacerlo en la derecha, usamos Right.
www. redusers.com
180
180 5. INTRODUCCIÓN A WPF Y XAML
<Window x:Class=”DockPanel.MainWindow”
xmlns=”http://schemas.microso
xmlns=”http://schemas.microsot.com/winx/2006/
t.com/winx/2006/xaml/prese
xaml/presentation”
ntation”
xmlns:x=”http://schemas.micros
xmlns:x=”http://schemas.microsot.com/winx/
ot.com/winx/2006/xaml”
2006/xaml”
Title=”MainWindow” Height=”350” Width=”525
Width=”525”>
”>
<DockPanel>
<Border Background=”AliceBlue” DockPanel.Dock=”Top”>
<TextBlock Text=”Hola”/>
</Border>
<Border Background=”AntiqueWhite” DockPanel.Dock=”Let”>
<TextBlock Text=”Mundo”/>
</Border>
<Border Background=”Aqua” DockPanel.Dock=”Bottom”>
<TextBlock Text=”Hello”/>
</Border>
<Border Background=”Aquamarine” DockPanel.Dock=”Let”>
<TextBlo
<TextBlock
ck Text=”
Text=”World”/>
World”/>
</Border>
<Border Background=”Azure” DockPanel.Dock=”Top”>
<TextBlock
<TextBlock Text=”---
Text=”--- Hola ---”/>
</Border>
<Border Background=”Beige” DockPanel.Dock=”Let”>
<TextBlock
<TextBlock Text=”---
Text=”--- Mundo ---”/>
</Border>
</DockPanel>
</Window>
Canvas
El siguiente panel que aprenderemos a usar se conoce como Canvas y
es sumamente sencillo de manejar. En él nos imaginamos que tenemos
un lienzo sobre el cual vamos a dibujar los dierentes controles o
elementos de nuestra interaz. Es el panel más parecido a la orma
tradicional de desarrollar las interaces. Allí colocamos los dierentes
elementos dando sus coordenadas dentro del Canvas.
Las coordenadas pueden darse reerenciadas a la esquina superior
izquierda del Canvas. Si buscamos un esquema cartesiano de
coordenadas similar a (X,Y), podemos utilizar la propiedad Let para
indicar a qué distancia del borde izquierdo deseamos el elemento,
y la propiedad Top para defnir la distancia a la que el elemento
queda del borde superior del Canvas. De esta manera, resulta sencillo
ubicar los objetos en una posición en particular.
particular. Cabe notar que si
los elementos se traslapan o se enciman, el orden en que ueron
defnidos indica cuál se dibuja antes de cuál. Tengamos en cuenta
que es posible cambiar esto programáticamente.
www. redusers.com
182
182 5. INTRODUCCIÓN A WPF Y XAML
<Window x:Class=”Canvas.MainWindow”
xmlns=”http://schemas.microso
xmlns=”http://schemas.microsot.com/winx/2006/
t.com/winx/2006/xaml/prese
xaml/presentation”
ntation”
xmlns:x=”http://schemas.micros
xmlns:x=”http://schemas.microsot.com/winx/
ot.com/winx/2006/xaml”
2006/xaml”
Title=”MainWindow” Height=”350” Width=”525
Width=”525”>
”>
<Canvas>
<Border Background=”AliceBlue” Canvas.Let=”50” Canvas.Top=”70”>
<TextBlock Text=”Hola”/>
</Border>
<Border Background=”AntiqueWhite” Padding=”30” Canvas.Let=”92”
Canvas.Top=”21”>
<TextBlock Text=”Mundo”/>
</Border>
<Border Background=”Aqua” Padding=”15” Canvas.Let=”160” Canvas.
Top=”85”>
<TextBlock Text=”Hello”/>
</Border>
<Border Background=”Aquamarine” Padding=”10,20,50,0” Canvas.
Let=”176” Canvas.Top=”61”>
<TextBlo
<TextBlock
ck Text=”
Text=”World”/>
World”/>
</Border>
<Border Background=”Azure” Canvas.Let=”28” Canvas.Top=”36”>
<TextBlo
<TextBlock
ck Text=”
ext=”---
--- Mundo ---” />
Si bien es bastante cómodo poder colocar las coordenadas del objeto usando las propiedades Let y
Top, ya que nos recuerdan al sistema cartesiano, también es posible indicar la posición en términos
de distancia desde Right y Bottom. La manera de hacerlo depende de nosotros, y podemos usar la
más cómoda o la que mejor funcione con nuestra lógica.
</Border>
<Border Background=”Beige” Canvas.Let=”176” Canvas.Top=”12”
Height=”25” Width=”75”>
<TextBl
<TextBlock
ock Text=”
ext=”---
--- Hola ---” />
</Border>
</Canvas>
</Window>
UniformGrid
UniormGrid puede ser una orma sencilla y efciente de sustituir
a Grid. Es similar a Grid, ya que tendrá una serie de celdas. En
UniormGrid defnimos la cantidad de renglones y columnas
que queremos tener; automáticamente, la v entana se dividirá
de modo uniorme para contener esas celdas. La indicación de
cuántas columnas y renglones deseamos se hace por medio de las
propiedades Columns y Rows de UniormGrid.
www. redusers.com
184
184 5. INTRODUCCIÓN A WPF Y XAML
<Window x:Class=”UniformGrid.MainWindow”
xmlns=”http://schemas.microso
xmlns=”http://schemas.microsoft.com/winfx/2006/
ft.com/winfx/2006/xaml/prese
xaml/presentation”
ntation”
xmlns:x=”http://schemas.micros
xmlns:x=”http://schemas.microsoft.com/winfx/
oft.com/winfx/2006/xaml”
2006/xaml”
www.redusers .com
C# AVANZADO 185
185
UniormGrid se encarga de ir rellenando las celdas de izquierda a derecha, pero tengamos en cuenta que si
por algún motivo necesitamos que las celdas y los controles se completen en el sentido contrario, es decir,
de derecha a izquierda, debemos usar la propiedad denominada FlowDirection con el valor RightToLet.
Esto es útil si nuestro software lo requiere, por ejemplo, en caso de usar idiomas que se escriben en esa
dirección particular. Es importante experimentar cuando menos una vez con esta propiedad para poder
observar su comportamiento y sentirnos cómodos usándola.
www. redusers.com
186
186 5. INTRODUCCIÓN A WPF Y XAML
Figura 9.
UniformGrid
dividió la ventana
en dos columnas
con tres renglo-
nes, para dar el
mismo tamaño a
cada una de las
celdas.
Scroll Viewer
Ahora que hemos visto los paneles más importantes, es momento
de analizar algunos de los controles que nos ayudarán a realizar
nuestras interaces. En nuestros programas es común que la cantidad de
elementos para mostrar sea mayor de lo que puede presentar la ventana.
En este caso, necesitamos tener un par de controles de scroll que nos
permitan movernos dentro de los contenidos.
Incorporar los scrolls en una aplicación de WPF es muy sencillo.
Lo que hacemos es crear un objeto de la clase ScrollViewer. Esta
clase representa un área que tiene elementos visibles, sobre la cual
es posible llevar a cabo el scroll. Para demostrar esto, haremos
que la aplicación con el panel Canvas tenga scrolls. El código se ha
modifcado de la siguiente manera:
<Window x:Class=”ScrollView.MainWindow”
xmlns=”http://schemas.microso
xmlns=”http://schemas.microsot.com/winx/2006/
t.com/winx/2006/xaml/prese
xaml/presentation”
ntation”
xmlns:x=”http://schemas.micros
xmlns:x=”http://schemas.microsot.com/winx/
ot.com/winx/2006/xaml”
2006/xaml”
Title=”MainWindow” Height=”300” Width=”300
Width=”300”>
”>
<ScrollViewer HorizontalScrollBarVisibility=”Auto”>
<Canvas Height=”500” Width=”500”>
<Border Background=”AliceBlue” Canvas.Let=”50” Canvas.Top=”70”>
<TextBlock Text=”Hola”/>
</Border>
Es muy importante saber que es posible dar diferentes valores a la visibilidad del scroll; por ejemplo,
Disabled impide que se muestre el scroll, Auto se encarga de mostrarlo solo cuando es necesario, y
también Visible lo muestra en todo momento, aun si no es preciso hacerlo. Cuando estamos diseñan-
do la interfaz de usuario, debemos tomar esto en cuenta.
www. redusers.com
188
188 5. INTRODUCCIÓN A WPF Y XAML
Debemos tener en cuenta que es posible que accedamos a realizar aplicaciones de WPF sin tener la
necesidad de escribir código de XAML. En este caso, se pueden definir los objetos y dar valores a las
propiedades directamente en C#. Se trata de una interesante opción si no estamos acostumbrados a
XAML, pero debemos recordar
recordar que perdemos parte de la flexibilida d que nos permite el código en él.
Es bueno conocer esta alternativa de programación, aunque la recomendación es aprender XAML ya
que es lo más utili zado y nos otorgará la flexibilidad necesaria para nuestros proyectos.
Figura 11. En
esta figura po-
demos observar
las barras de
scroll, ya que el
Canvas es más
grande que la
ventana.
GroupBox
Debemos tener presente que GroupBox es un control que nos
permite realizar la tarea de agrupar en su interior dierentes
controles, según lo que necesitemos para la aplicación en la cual nos
encontramos trabajando. Esta agrupación se despliega visualmente
por medio de un marco que envuelve a los controles adecuados y
tiene también un título que nos indica qué tipo de contenidos
tenemos. El uso de GroupBox es muy útil porque permite que los
elementos comunes de las interaces de usuario queden agrupados
de una manera en que resulte
r esulte ácil utilizarlos.
Figura 12.
Algunas empre-
sas producen
colecciones de
controles que po-
demos utilizar e,
incluso, ofrecen
pruebas gratis
de los mismos.
www. redusers.com
190
190 5. INTRODUCCIÓN A WPF Y XAML
<Window x:Class=”GroupBox.MainWindow”
xmlns=”http://schemas.microso
xmlns=”http://schemas.microsot.com/winx/2006/
t.com/winx/2006/xaml/prese
xaml/presentation”
ntation”
xmlns:x=”http://schemas.micros
xmlns:x=”http://schemas.microsot.com/winx/
ot.com/winx/2006/xaml”
2006/xaml”
Title=”MainWindow” Height=”211” Width=”250
Width=”250”>
”>
<Grid>
<GroupBox Header=”Mi grupo de controles” Margin=”30”>
<StackPanel>
<Button Content=”Un boton”/>
<TextBlock Text=”Mi texto”/>
<TextBox
<TextBox Text=”
Text=”dato
dato”/>
”/>
<Button Content=”Otro boton”/>
</StackPanel>
</GroupBox>
</Grid>
</Window>
Es posible utilizar una gran cantidad de propiedades para hacer lucir el GroupBox de la manera en
que nosotros necesitamos. Podemos indicar sus dimensiones, color de fondo y del borde, y todas
las características de la fuente que será utilizada para la propiedad Header. Para conocer la lista
completa de propiedades, podemos visitar MSDN.
Figura 13.
Existen controles
de WPF que nos
permite trabajar
con información
geográfica, como
en este ejemplo
de RadMap.
Figura 14. El
GroupBox se
ve claramente
en la ventana,
encerrando a los
controles que
hemos definido
en su interior.
www. redusers.com
192
192 5. INTRODUCCIÓN A WPF Y XAML
Expander
El control Expander es muy similar a GroupBox ya que nos permite
agrupar en su interior otros controles relacionados entre sí. La dierencia
es que Expander puede contraerse o expandirse para mostrar sus
contenidos cuando sea necesario. La orma más usual para hacer esto es
por medio de un clic del mouse en el título del control.
Al igual que GroupBox, solo permite tener un elemento en su interior,
por lo que si deseamos colocar más de uno, tendremos que apoyarnos
en algún panel y colocar en su interior todo lo que precisemos.
<Window x:Class=”Expander
x:Clas s=”Expander.MainWindow”
.MainWindow”
xmlns=”http://schemas.microso
xmlns=”http://schemas.microsot.com/winx/2006/
t.com/winx/2006/xaml/prese
xaml/presentation”
ntation”
xmlns:x=”http://schemas.micros
xmlns:x=”http://schemas.microsot.com/winx/
ot.com/winx/2006/xaml”
2006/xaml”
www. redusers.com
194
194 5. INTRODUCCIÓN A WPF Y XAML
<Window x:Class=”Cap5.MainWindow”
xmlns=”http://schemas.microso
xmlns=”http://schemas.microsot.com/winx/2006/
t.com/winx/2006/xaml/prese
xaml/presentation”
ntation”
xmlns:x=”http://schemas.micros
xmlns:x=”http://schemas.microsot.com/winx/
ot.com/winx/2006/xaml”
2006/xaml”
Title=”MainWindow” Height=”88” Width=”525
Width=”525”>
”>
<Grid>
<!--Defninos el grid-->
<Grid.RowDefnitions>
<RowDefnition Height=”Auto”/>
<RowDefnition Height=”Auto”/>
</Grid.RowDefnitions>
<Grid.ColumnDefnitions>
<ColumnDefnition Width=”Auto”/>
<ColumnDefnition
<ColumnDefnition Width=”100”/>
<ColumnDefnition Width=”*”/>
</Grid.ColumnDefnitions>
<TextBlock
<TextBlock Text=”Valor
Text=”Valor a:” Grid.Row=”0” Grid.Column=”
Grid.Column=”0”/>
0”/>
WRAPPANEL Y LA VENTANA
La forma en que se dibujan los elementos correspondientes a WrapPanel en la ventana depende del
tamaño que esta tenga. Esto significa que si se cambian las dimensiones de la ventana, los diferentes
elementos pueden variar su posición. Hay que tomar esto en cuenta para los diseños en los cuales
trabajemos. Un cambio de posición puede destruir nuestro diseño de interfaz.
<TextBox
<TextBox x:Name=”txtA”
x:N ame=”txtA” Grid.Row=”0” Grid.Column=”1”
Grid.Colum n=”1” />
<Button Content=”Calcular” Grid.Row=”0” Grid.Column=”2”
Click=”btnCalcular_click” x:Name=”btnCalcular” />
<TextBlock
<TextBlock Text=”Valor
Text=”Valor b:”
b :” Grid.Row=”1” Grid.Column=”0”/
Grid. Column=”0”/>
>
<TextBox
<TextBox x:Name=”txtB”
x:N ame=”txtB” Grid.Row=”1” Grid.Column=”1”
Grid.Colum n=”1” />
<TextBlock
<TextBlock x:Name=”t
x:Name=”txtResult
xtResultado”
ado” Text=”Result
ext=”Resultado
ado =” Grid.Row=”1”
Grid.Column=”2”/>
</Grid>
</Window>
DIBUJAR UN MARCO
Es importante tener en cuenta que con la clase llamada Border podemos hacer uso de la propiedad
denominada BorderBrush, la cual nos permite seleccionar el color que tendrá el marco correspondiente
de dicho elemento. Junto con esta propiedad, debemos usar también la llamada BorderThickness,
que indica cuán grueso es el marco que deseamos dibujar.
www. redusers.com
196
196 5. INTRODUCCIÓN A WPF Y XAML
www.redusers .com
C# AVANZADO 197
197
r = a + b;
txtResultado.T
txtResult ado.Text
ext = “Resultado
“Result ado =”
= ” + r.T
r.ToString();
oString();
}
}
Figura 18.
Nuestro primer
programa con
lógica escrito en
WPF está funcio-
nando en forma
correcta.
RESUMEN
WPF es una nueva tecnología que nos permite tener, bajo un mismo techo, lo que antes se hacia con diver-
sas APIs no directamente conectadas entre sí. Esto facilita la creación de interfaces de usuario complejas e
interactivas, al mismo tiempo que su renderizado es más rápido por ser acelerado por hardware. XAML se
emplea para definir la interfaz de usuario. Los elementos definidos en XAML pueden conectarse al código de
C#. Los paneles permiten colocar diferentes objetos y tener control sobre la posición de estos.
www. redusers.com