Silverlight 4 Nuevas Características- Botón Derecho del Ratón - Blog de Oskar Alvarez

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

Published 19/1/2010 12:38 por Oskar Alvarez
Archivado en:
Comparte este post:
http://geeks.ms/blogs/oalvarez/archive/2010/01/19/silverlight-4-nuevas-caracter-237-sticas-bot-243-n-derecho-del-rat-243-n.aspx

Comentarios

# 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

Tuesday, January 19, 2010 1:02 PM por .NET con oskar

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

y de donde obtengo la clase Dialog?

Thursday, April 29, 2010 4:37 PM por Manuel