Hi,
Thanks, that was what I needed. I wanted to have several textboxes with context menus for cut, copy, and paste, but only wanted one set of functions to handle them all. In case it helps anyone else below is my code(modified from a previous telerik example):
The xaml copied to each textbox:
<telerikNavigation:RadContextMenu.ContextMenu>
<telerikNavigation:RadContextMenu Opened="ContextMenuOpened" Closed="ContextMenuClosed" >
<telerikNavigation:RadMenuItem Header="Cut" Click="RadMenuItem_Click" />
<telerikNavigation:RadMenuItem Header="Copy" Click="RadMenuItem_Click" />
<telerikNavigation:RadMenuItem Header="Paste" Click="RadMenuItem_Click" />
</telerikNavigation:RadContextMenu>
</telerikNavigation:RadContextMenu.ContextMenu>
The generic event handling functions (I am using the extension method from the telerik post with the download - ContextMenuOnTextBox_6E924F29):
private void RadMenuItem_Click(object sender, Telerik.Windows.RadRoutedEventArgs e)
{
Telerik.Windows.Controls.
RadMenuItem item = e.OriginalSource as Telerik.Windows.Controls.RadMenuItem;
Telerik.Windows.Controls.
RadContextMenu menu = item.Parent as Telerik.Windows.Controls.RadContextMenu;
if (menu != null)
{
TextBox txt = menu.UIElement as TextBox;
if (txt != null)
{
switch (item.Header.ToString())
{
case "Cut":
txt.Cut();
break;
case "Copy":
txt.Copy();
break;
case "Paste":
txt.Paste();
break;
}
}
}
}
private void ContextMenuOpened(object sender, RoutedEventArgs e)
{
// Customize the context menu depending on the selection and the clipboard content
Telerik.Windows.Controls.
RadContextMenu menu = sender as Telerik.Windows.Controls.RadContextMenu;
if (menu != null)
{
TextBox txt = menu.UIElement as TextBox;
if (txt != null)
{
bool hasSelection = txt.SelectionLength > 0;
(menu.Items[
0] as Telerik.Windows.Controls.RadMenuItem).IsEnabled = hasSelection; // Cut
(menu.Items[
1] as Telerik.Windows.Controls.RadMenuItem).IsEnabled = hasSelection; // Copy
bool hasClipboardContent = !string.IsNullOrEmpty(Clipboard.Paste());
(menu.Items[
2] as Telerik.Windows.Controls.RadMenuItem).IsEnabled = hasClipboardContent; // Paste
}
}
}
private void ContextMenuClosed(object sender, System.Windows.RoutedEventArgs e)
{
Telerik.Windows.Controls.
RadContextMenu menu = sender as Telerik.Windows.Controls.RadContextMenu;
if (menu != null)
{
TextBox txt = menu.UIElement as TextBox;
if (txt != null)
{
// RadMenu and RadContextMenu steal the focus in order to provide
// keyboard navigation. That's why we need to focus the text box
// again when the menu is closed.
txt.Focus();
}
}
}