Context Menu with the Right Mouse Button Events

Introduced in Silverlight 4 are several new events, two of these MouseRightButtonDown and MouseRightButtonUp relate to the right mouse button.  With these new events it is now easy to implement a right click context menu.

Right Click Context Menus

<UserControl x:Class="RightMouseClickContextMenu.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:liquidMenu="clr-namespace:Liquid;assembly=Liquid.Menu"
    mc:Ignorable="d">
    <Canvas x:Name="LayoutRoot" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="White" MouseRightButtonDown="LayoutRoot_MouseRightButtonDown" MouseLeftButtonDown="LayoutRoot_MouseLeftButtonDown">
        <TextBlock Canvas.Left="50" Canvas.Top="50" Text="Click your right mouse button!" FontSize="20" />
        <liquidMenu:Menu x:Name="popupMenu" ItemSelected="MenuList_ItemSelected" Visibility="Collapsed">
            <liquidMenu:MenuItem ID="cut" Icon="images/cut.png" Text="Cut" Shortcut="Ctrl+X" />
            <liquidMenu:MenuItem ID="copy" Icon="images/copy.png" Text="Copy" Shortcut="Ctrl+C" />
            <liquidMenu:MenuItem ID="paste" Icon="images/paste.png" Text="Paste" Shortcut="Ctrl+V" />
            <liquidMenu:MenuDivider />
            <liquidMenu:MenuItem ID="new" Text="New">
                <liquidMenu:Menu>
                    <liquidMenu:MenuItem ID="pdf" Icon="images/pdf.png" Text="PDF Document" />
                    <liquidMenu:MenuItem ID="excel" Icon="images/xls.png" Text="Excel Spreadsheet" />
                    <liquidMenu:MenuItem ID="word" Icon="images/doc.png" Text="Word Document" />
                </liquidMenu:Menu>
            </liquidMenu:MenuItem>
        </liquidMenu:Menu>
    </Canvas>
</UserControl>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

using Liquid;

namespace RightMouseClickContextMenu
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void MenuList_ItemSelected(object sender, MenuEventArgs e)
        {
            switch (e.Tag.ToString())
            {
                case "cut":
                    // TODO: Cut functionality
                    break;
                case "copy":
                    // TODO: Copy functionality
                    break;
                default:
                    break;
            }
            popupMenu.Hide();
        }

        private void LayoutRoot_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
        {
            Point p = e.GetPosition(this);

            Canvas.SetLeft(popupMenu, p.X);
            Canvas.SetTop(popupMenu, p.Y);
            popupMenu.Show();

            e.Handled = true;
        }

        private void LayoutRoot_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            popupMenu.Hide();
        }
    }
}


Here we are using the Liquid Popup Menu control for our context menu.  When the MouseRightButtonDown event occurs we work out the X/Y position of the mouse and position/show the context menu.

It is important to set e.Handled = true when we have finished in the event handler in order to ensure Silverlight does not show the default Silverlight Context menu.

Liana wrote:

I have a liquid menu which has also submenus. It seems that if the browser is zoomed the submenus are not displayed anymore.


Is there a solution for this problem?


Thanks.

HItesh wrote:

HI johnrahn,


You can also access Menu and sub menu item using event MouseLeftButtonDown. It works for me.


Thanks.

johnrahn wrote:

Excellent tutorial on your menus and use of Liquid!


Question: How do I access the new|pdf/word/excel submenu items?  


I figured it out by trial and error:Just use "pdf" or "word" or "excel" as comparison to e.Tag.ToString().  


Seems like these SHOULD be sub-tags to the "new" menu item.


Thank you

JR

Guzikowski wrote:

Hi,


Is there an easy way to configure the menu items of menu based on the canvas? I have an image and certain regions will have 2 or 3 menu items, while certain menu items may have two levels. What I would like to do is generate the context menu based on an XML file or better yet a SharePoint list. Just wondering if this is feasible before I run myself ragged.


Thanks for any advice you can give on this issue,

Ed

Serge wrote:

Ok it' work with Icon="../images/cut.png


But about <StackPanel>

Serge wrote:

It's very nice RightClickMenu but I got 2 questions.

1) It's possible to use it in <StackPanel> rather <Canvas>?

2) I create a images directory in the SilverLight Project with icones.  But I cannot see those icones in my menu.  I try a lot of paths : images/cut.png, /images/cut.png, ~/images/cut.png, etc.  Nothing work.  Any Idea?


THank a lot and congradulation about your vers usuful tools in SL 4.

Post your Comments

Liana wrote:

I have a liquid menu which has also submenus. It seems that if the browser is zoomed the submenus are not displayed anymore.


Is there a solution for this problem?


Thanks.

HItesh wrote:

HI johnrahn,


You can also access Menu and sub menu item using event MouseLeftButtonDown. It works for me.


Thanks.

johnrahn wrote:

Excellent tutorial on your menus and use of Liquid!


Question: How do I access the new|pdf/word/excel submenu items?  


I figured it out by trial and error:Just use "pdf" or "word" or "excel" as comparison to e.Tag.ToString().  


Seems like these SHOULD be sub-tags to the "new" menu item.


Thank you

JR

Guzikowski wrote:

Hi,


Is there an easy way to configure the menu items of menu based on the canvas? I have an image and certain regions will have 2 or 3 menu items, while certain menu items may have two levels. What I would like to do is generate the context menu based on an XML file or better yet a SharePoint list. Just wondering if this is feasible before I run myself ragged.


Thanks for any advice you can give on this issue,

Ed

Serge wrote:

Ok it' work with Icon="../images/cut.png


But about <StackPanel>

Serge wrote:

It's very nice RightClickMenu but I got 2 questions.

1) It's possible to use it in <StackPanel> rather <Canvas>?

2) I create a images directory in the SilverLight Project with icones.  But I cannot see those icones in my menu.  I try a lot of paths : images/cut.png, /images/cut.png, ~/images/cut.png, etc.  Nothing work.  Any Idea?


THank a lot and congradulation about your vers usuful tools in SL 4.

Post your Comments

 
Latest Games
Zombie Escape
Apr 19, 2016
Plays: 1,346

Zombie Escape ScreenshotDrive fast before the crazy mutant zombies get you!

6 Ratings/4.1 Average
Car Parking
Jan 16, 2016
Plays: 1,327

Car Parking ScreenshotGuide the car to its parking space in this fun Car Parking game.

1 Rating/5 Average
Trash It
Jan 11, 2016
Plays: 1,212

Trash It ScreenshotAim for the Trash Can and get the various items of Trash in the bin.

4 Ratings/5 Average
Sky Fly
Jan 11, 2016
Plays: 1,339

Sky Fly ScreenshotFly your plane in this colorful vertical scrolling shoot-em-up. Blast the bad guys and collect any bonus's they leave behind.

1 Rating/5 Average
Professor Snappy
Jan 11, 2016
Plays: 978

Professor Snappy ScreenshotPop as many bubbles as possible in this fun and colorful bubble popping game. The levels start off easy enough but gradually get harder!

1 Rating/5 Average
Monster Match Saga
Jan 10, 2016
Plays: 1,302

Monster Match Saga ScreenshotHere we have a bunch of monsters that need to be matched up. Look out for the bomb and spinning monsters that will cause special damage!

3 Ratings/4.6 Average
Fly Bird Fly
Jan 10, 2016
Plays: 1,022

Fly Bird Fly ScreenshotGuide your friendly Bird through the maze of pipes and other obstacles collecting the Stars in this cool arcade game inspired by the legendary Flappy Bird.

1 Rating/5 Average
Life In One
Jan 10, 2016
Plays: 1,234

Life In One ScreenshotYou are stranded on an Alien planet. Your goal is to build a space rocket and escape. Start by building units to create power and mine the metal patches. Build defenses to defend your base from the advancing Aliens and Zombies!

2 Ratings/3 Average
X Pool
Jan 02, 2016
Plays: 1,709

X Pool ScreenshotPlay Pool against the computer or battle against your friends in the online mode!

3 Ratings/3 Average
Fruit Slicer
Jan 02, 2016
Plays: 973

Fruit Slicer ScreenshotSlice the fruit that is thrown up onto the screen. Slice the fruit into multiple pieces for maximum points!

1 Rating/5 Average