Un viaje sobre lenguajes, APIs y otras cosas raras en el mundo del desarrollo de sistemas.


ahora
que ya sabemos que usandlo la etiqueta local haremos referencia a nuestro
namespace (paquete en Java) tenemos que definir la etiqueta referente a nuestro
control de usuario:

           
<Canvas Grid.Column="0" Grid.Row="0">

                   
<local:MensajesGenerales x:Name="ventanaEmergente"

                                       
 
Visibility="Hidden" Canvas.Left="83" Canvas.Top="0" Height="180" Width="437"/>

               
</Canvas>

Observese que nuestro control lo estamos poniendo dentro de un canvas, esto es
por que si lo hacemos dentro de un Grid este no dejará que el código funcione
correctamente, esto lo notaremos en el siguiente paso, generar el código de
nuestro control para poder darle la funcionalidad de movimiento y de que el
botón "cierre" nuestra ventana emergente, para utilizar nuestra
ventana basta con poner un botón y cambiarle el valor de la propiedad
Visibility a "Visible" (En SilverLight Visibility solo puede tener
los valores de Collapsed y Visible, Hidden no existe).

Regresando a nuestro control el código debe verse algo como:

using System;

using System.Collections.Generic;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using
System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

 

namespace
mx.gob.scjn.ius_common.gui.apoyos

{

    /// <summary>

    /// Interaction logic for MensajesGenerales.xaml

    /// </summary>

    public partial class MensajesGenerales : UserControl

    {

        private
Point inicioDrag;

        private
Point ofsetDrag;

 

        public
MensajesGenerales()

        {

           
InitializeComponent();

        }

 

        private
void salir_MouseLeftButtonUp(object sender, RoutedEventArgs
e)

        {

            this.Visibility = Visibility.Hidden;

        }

 

        private
void BarraMovimiento_MouseLeftButtonDown(object sender, MouseButtonEventArgs
e)

        {

           
ofsetDrag = e.GetPosition(this);

            if ((inicioDrag.X == -1) && (inicioDrag.Y ==
-1))

            {

               
inicioDrag = e.GetPosition(Parent as Canvas);

               
this.BarraMovimiento.CaptureMouse();

            }

 

        }

 

        private
void BarraMovimiento_MouseLeftButtonUp(object sender, MouseButtonEventArgs
e)

        {

           
inicioDrag.X = -1;

           
inicioDrag.Y = -1;

           
BarraMovimiento.ReleaseMouseCapture();

 

       
}

 

        private
void BarraMovimiento_MouseMove(object sender, MouseEventArgs
e)

        {

            if ((e.LeftButton == MouseButtonState.Pressed)
&& (BarraMovimiento.IsMouseCaptured))

            {

               
Point puntoActual = e.GetPosition(Parent as Canvas);

               
puntoActual.X -= ofsetDrag.X;

               
puntoActual.Y -= ofsetDrag.Y;

               
Canvas.SetTop(this,
puntoActual.Y);

               
Canvas.SetLeft(this,
puntoActual.X);

            }

           
else

           
{

               
inicioDrag.X = -1;

               
inicioDrag.Y = -1;

           
}

 

       
}

    }

}

 

Como
se puede ver el botón lo único que hará en realidad es esconder nuestro
control, mientras que las funciones definidas en nuestro rectángulo permitirán
la simulación de arrastrar y soltar de nuestra ventana alterando los valores de
Canvas.Top y Canvas.Left, es precisamente por eso que el control no funcionará
en un Grid y por lo que debe ponerse en un Canvas (que sí puede esar dentro de
un Grid).

Espero que esto les sea de mucha utilidad para su applet…. perdon.. XBAP

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: