Silverlight 4 Nuevas Características- Botón Derecho del Ratón

Una de las funcionalidades mas demandas por los desarrolladores de Silverlight era soporte al botón derecho del ratón para mostrar menús contextuales. Silverlight 4 si soporta ahora el botón derecho del ratón, este esta implementado en la clase UIElement en los eventos MouseRightButtonDown y MouseRightButtonUp a estos eventos les llega el parámetro MouseButtonEventArgs el cual es usado con el click del botón izquierdo.

Cuando pulsamos con el botón izquierdo por defecto nos muestra el menú de Silverlight para bloquear este menú debemos de recoger el evento MouseRightButtonDown y poner e.Handled=true, de esta manera el menú por defecto no se muestra y ya podemos mostrar nuestro menú contextual en el evento MouseLeftButtonUp.

Por ejemplo

 

private void imgTree_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    e.Handled = true;
}

 

private void imgTree_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
    Image image = sender as Image;
    if (image != null)
    {
        ContextMenu contextMenu = new ContextMenu(PrintCanvas, image);
        contextMenu.Show(e.GetPosition(LayoutRoot));
    }
}

En nuestro caso la clase ContextMenu hereda de Dialog, porque mostraremos un dialogo y su código

public class ContextMenu:Dialog
    {
        private Image imageToDelete;
        private Canvas canvas;

        public ContextMenu(Canvas canvas, Image image)
        {
            this.canvas = canvas;
            imageToDelete = image;
        }

        protected override FrameworkElement GetContent()
        {
            Grid grid = new Grid() { Width = 100, Height = 30 };
            Border border = new Border() { BorderBrush = new SolidColorBrush(Colors.Black), BorderThickness = new Thickness(1), Background = new SolidColorBrush(Colors.LightGray) };
            grid.Children.Add(border);

            TextBlock imageDeleteTextBlock = new TextBlock() { Text = "Borrar imagen", VerticalAlignment=VerticalAlignment.Center};
            imageDeleteTextBlock.MouseLeftButtonUp += (s, args) =>
                {
                    if (canvas != null && imageToDelete != null)
                    {
                        canvas.Children.Remove(imageToDelete);
                    }
                };

            grid.Children.Add(imageDeleteTextBlock);

            return grid;
        }

        protected override void OnClickOutside()
        {
            Close();
        }
    }

 

También podría haber sido un PopUp en vez de un dialogo

2 comentarios en “Silverlight 4 Nuevas Características- Botón Derecho del Ratón”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *