如何在文本框中更改(以及稍后还原)默认上下文菜单

时间:2010-08-12 19:46:09

标签: c# wpf contextmenu default

我想更改默认文本框上下文菜单,所以我创建了自己的菜单,我就这样分配了它

texbox.ContextMenu = myContextMenu

但是我不知道如何恢复默认文本框菜单(在运行时)。我需要myContextMenu才能显示当我用鼠标右键单击文本框时(按住控制按钮)。在其他情况下,我需要显示默认文本框上下文菜单。 有可能??

3 个答案:

答案 0 :(得分:2)

以下是Microsoft提供的示例:

http://msdn.microsoft.com/en-us/library/ms750420.aspx

对于记录,以下是使用WinForms执行此操作的方法:

public partial class TextBoxContextMenuDemo : Form
{
    ContextMenu mnuContextDefault;
    ContextMenu mnuContextAlt;

    MenuItem mnuItmAltMenuTest;

    public TextBoxContextMenuDemo()
    {
        InitializeComponent();
        InitializeAltContextMenu();
    }

    private void InitializeAltContextMenu()
    {
        mnuContextDefault = new ContextMenu();
        mnuContextDefault = this.TextBox1.ContextMenu;

        mnuItmAltMenuTest = new MenuItem();
        mnuItmAltMenuTest.Index = -1;
        mnuItmAltMenuTest.Text = "Test Menu Item";
        mnuItmAltMenuTest.Click += new System.EventHandler(this.mnuItmAltMenuTest_Click);

        mnuContextAlt = new ContextMenu();
        mnuContextAlt.MenuItems.Add(mnuItmAltMenuTest);
    }

    private void TextBox1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            if ((Control.ModifierKeys == Keys.Control))
            {
                this.TextBox1.ContextMenu = mnuContextAlt;
                TextBox1.ContextMenu.Show(TextBox1, new Point(e.X, e.Y));
            }
            else
            {
                this.TextBox1.ContextMenu = mnuContextDefault;
            }
        }
    }

    private void mnuItmAltMenuTest_Click(object sender, System.EventArgs e)
    {
        MessageBox.Show("You clicked the alternate test menu item!");
    }
}

HTH!

答案 1 :(得分:0)

实际上比起初看起来更难。我相信默认的上下文菜单是控件的实际模板的一部分。

如果您只想剪切/复制/粘贴,最简单的方法是创建第二个实现这些选项的ContextMenu。如果这样做,您可以使用内置的ApplicationCommands来实现功能,还可以自动本地化此ContextMenu。

答案 2 :(得分:0)

您可以将ContextMenu-Property设置为null。 OnContextMenuOpening事件也可以帮助您。