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次苹果


评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值