您的位置:首页 > 其它

silverlight:向TextBox添加右键菜单,菜单包括复制、粘贴、剪切、选择全部等四项功能!

2012-09-25 16:39 831 查看



写在前头:使用silverlight版本4.0以上,vs2010开发。

这里已将其封装成为一个类,该类只需传入TextBox,即可为其生成右键菜单,并具有相应的功能,具体代码,一会儿贴上,使用方法,附于代码下方,另外还有相关图标,但不知道怎么传附件,呵呵,所以图片可能传不了了,有想要的可以给我说下。

先上个效果图:



下面是整个源代码:

/// <summary>
/// 该类负责向TextBox添加右键菜单,菜单包括复制、粘贴、剪切、选择全部四项
/// </summary>
public static class CreatMenuForTextBox
{
// 菜单
static ContextMenu menu;
//TextBox
static TextBox textbox;

/// <summary>
/// 为textBox添加右键菜单
/// </summary>
/// <param name="textBox">所要添加的TextBox</param>
public static void creatMenu(TextBox textBox)
{
menu = new ContextMenu();
menu.Items.Add(getItem("剪切", "../Images/CutHS.png"));
menu.Items.Add(getItem("复制", "../Images/CopyHS.png"));
menu.Items.Add(getItem("粘贴", "../Images/PasteHS.png"));
menu.Items.Add(new Separator());
menu.Items.Add(getItem("选择全部", null));
ContextMenuService.SetContextMenu(textBox, menu);
textbox = textBox;
}

/// <summary>
/// 得到一个菜单项
/// </summary>
/// <param name="header">菜单项的名字</param>
/// <param name="imagePath">菜单项的图标</param>
/// <returns></returns>
private static MenuItem getItem(string header, string imagePath)
{
MenuItem item = new MenuItem();
item.Header = header;
if (imagePath != null)
{
Image im = new Image();
im.Source = (new ImageSourceConverter()).ConvertFromString(imagePath) as ImageSource;
item.Icon = im;
}
item.Click += new RoutedEventHandler(item_Click);
return item;
}

/// <summary>
/// 点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void item_Click(object sender, RoutedEventArgs e)
{
MenuItem menuItem = (MenuItem)sender;
try
{
execute(menuItem.Header.ToString());
}
catch (Exception)
{
}
textbox.Focus();
menu.IsOpen = false;
}

/// <summary>
/// 具体执行操作,之所以将其提出来,是为了捕捉异常
/// </summary>
/// <param name="selected">菜单项的名称</param>
static void execute(string selected)
{
switch (selected)
{
case "剪切":
Clipboard.SetText(textbox.SelectedText);
textbox.SelectedText = "";
break;
case "复制":
Clipboard.SetText(textbox.SelectedText);
break;
case "粘贴":
textbox.SelectedText = Clipboard.GetText();
break;
case "选择全部":
textbox.SelectAll();
break;
default:
break;
}
}
}

使用方法很简单,就一句话,如下:

CreatMenuForTextBox.creatMenu(textBox);


好了,到此也就差不多说清楚了,大家如果觉得有用的话,或有什么需要的话,联系我,谢谢支持!

天猫正品:西诺A10正品通用大容量锂聚合物手机移动电源充电宝
10000毫安 【包邮】 高端精品 安全聚合物 充5次苹果!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐