silverlight中添加给TextBox批量添加右键菜单
2013-08-07 18:48
281 查看
基于此人写的代码,修改优化后支持批量给所有TextBox添加右键菜单,而菜单共用一个,节省资源。
public static class CreatMenuForTextBox { // 菜单 static ContextMenu menu; //TextBox static TextBox textbox; /// <summary> /// 为任意元素的内部TextBox添加右键菜单 /// </summary> public static void creatMenu(DependencyObject obj) { menu = new ContextMenu(); menu.Items.Add(getItem("剪切", "../Images/1.jpg")); menu.Items.Add(getItem("复制", null)); menu.Items.Add(getItem("粘贴", null)); menu.Items.Add(new Separator()); menu.Items.Add(getItem("选择全部", null)); menu.Opened += menu_Opened; SetMenu(obj); } static void SetMenu(DependencyObject obj) { var count = VisualTreeHelper.GetChildrenCount(obj); for (int i = 0; i < count; i++) { var child = VisualTreeHelper.GetChild(obj, i); if (child is TextBox) { ((TextBox)child).MouseRightButtonDown += TextBox_MouseRightButtonDown; } else { SetMenu(child); } } } static void TextBox_MouseRightButtonDown(object sender, MouseButtonEventArgs e) { e.Handled = true; textbox = sender as TextBox; textbox.Focus(); menu.IsOpen = true; } static void menu_Opened(object sender, RoutedEventArgs e) { textbox.Focus(); } 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; } static void item_Click(object sender, RoutedEventArgs e) { MenuItem menuItem = (MenuItem)sender; try { execute(menuItem.Header.ToString()); } catch (Exception) { } textbox.Focus(); } static void execute(string selected) { switch (selected) { case "剪切": Clipboard.SetText(textbox.SelectedText); textbox.SelectedText = ""; textbox.GetBindingExpression(TextBox.TextProperty).UpdateSource(); break; case "复制": Clipboard.SetText(textbox.SelectedText); break; case "粘贴": textbox.SelectedText = Clipboard.GetText(); textbox.GetBindingExpression(TextBox.TextProperty).UpdateSource(); break; case "选择全部": textbox.SelectAll(); break; default: break; } } }2013-11-20修改:添加了剪切和粘贴动作对绑定数据源的更新。
相关文章推荐
- silverlight:向TextBox添加右键菜单,菜单包括复制、粘贴、剪切、选择全部等四项功能!
- Silverlight实用窍门系列:4.Silverlight 4.0添加鼠标右键菜单和Silverlight全屏模式的进入退出。【附带源码实例】
- silverlight 制作可拖动控件,并且在控件上添加右键菜单
- Silverlight实用窍门系列:4.Silverlight 4.0添加鼠标右键菜单和Silverlight全屏模式的进入退出。【附带源码实例】
- 4.Silverlight 4.0添加鼠标右键菜单和Silverlight全屏模式的进入退出。
- Silverlight 4.0添加鼠标右键菜单和Silverlight全屏模式的进入退出
- silverlight中对datagrid添加右键菜单的注意事项。
- centos中给鼠标右键菜单添加“打开…
- 为jQuery.Treeview 添加右键菜单
- 为jQuery.Treeview添加右键菜单的实现代码
- C# DataGridView添加右键菜单等技巧(转)
- XP右键菜单添加“打开所在文件夹”功能
- Win10右键菜单中怎么添加注册DLL选项?
- MFC学习笔记.day03-菜单,图形标记菜单创建,菜单栏禁用,命令响应,右键弹出菜单,添加菜单
- 在右键菜单中添加Dos快捷通道-dos在这里
- RichTextBox自动添加右键菜单
- 如何在IE右键菜单中添加菜单项
- vc++ 如何添加右键弹出菜单
- JCEF 如何修改右键菜单项(JCEF在右键菜单中添加开发者选项-show dev tools)
- VC在指定控件中添加右键菜单的两种方法