Silverlight 4 allows us access to right-click functionality, in earlier versions of Silverlight right-clicking would bring up the standard SL popup menu.
Simple Right Click
To capture a right-click the MouseRightButtonDown event can be subscribed to:
MouseRightButtonDown="btnPopup_MouseRightButtonDown"
To prevent the standard SL popup from appearing, in the event handler we set Handled to true, this stops the right-click event from bubbling up to Silverlight:
private void btnPopup_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
// Prevent the standard Silverlight popup
e.Handled = true;
MessageBox.Show("Right button clicked");
}
Context Menu
The ContextMenu is available in the Silverlight Toolkit.
A popup context menu can easily be added to a control (e.g. a button), when the control is right-clicked the context menu is automatically shown
The XAML below declares a simple popup menu with 2 menu items: Open & Save that when clicked both fire the same event handler.
<Button Name="btnContextMenu"
Content="ContextMenu Right Click"
MouseRightButtonDown="btnContextMenu_MouseRightButtonDown">
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
<toolkit:MenuItem Header="Open" Click="ContextMenuItem_Click"/>
<toolkit:MenuItem Header="Save" Click="ContextMenuItem_Click"/>
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
</Button>
The namespace (xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit") must be declared - if you drag and drop something from the Toolkit the namespace will be automatically added.
Full listing (simple popup & context menu)
XAML:
<UserControl x:Class="SL4RClickPopup.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:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400" >
<StackPanel>
<Button Name="btnPopup"
Content="Simple Right Click"
MouseRightButtonDown="btnPopup_MouseRightButtonDown" />
<Button Name="btnContextMenu"
Content="ContextMenu Right Click"
MouseRightButtonDown="btnContextMenu_MouseRightButtonDown">
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
<toolkit:MenuItem Header="Open" Click="ContextMenuItem_Click"/>
<toolkit:MenuItem Header="Save" Click="ContextMenuItem_Click"/>
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
</Button>
</StackPanel>
</UserControl>
Code Behind:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace SL4RClickPopup
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
private void btnPopup_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
// Prevent the standard Silverlight popup
e.Handled = true;
MessageBox.Show("Right button clicked");
}
private void btnContextMenu_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
// Because we have declare a ContextMenu in Xaml we don't
// need to manually set e.Handled = true;
}
private void ContextMenuItem_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("ContextMenu item clicked");
}
}
}
SHARE: