微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐