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


写在前头:使用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次苹果

相关文章

如何在Silverlight4(XAML)中绑定IsEnabled属性?我试过简单的...
我正在编写我的第一个vb.net应用程序(但我也会在这里标记c#,...
ProcessFile()是在UIThread上运行还是在单独的线程上运行.如...
我从同行那里听说,对sharepoint的了解对职业生涯有益.我们不...
我正在尝试保存一个类我的类对象的集合.我收到一个错误说明:...
我需要根据Silverlight中的某些配置值设置给定控件的Style.我...