WPF自定义TextBox ContextMenuOpening问题

时间:2010-04-21 08:23:56

标签: wpf contextmenu

我遇到了一个自定义控件的问题,当我以编程方式挂起它时,我写的并没有触发它的ContextMenuOpening事件。该控件基本上是标准TextBox的包装器:

public class MyTextBox : TextBox
{
    public MyTextBox()
    {
        this.ContextMenuOpening += new ContextMenuEventHandler(MyTextBox_ContextMenuOpening);
    }

    void MyTextBox_ContextMenuOpening(object sender, ContextMenuEventArgs e)
    {
        MessageBox.Show("ContextMenuOpening event fired");
    }
}

关于XAML没有任何疑问:

<local:MyTextBox Height="25" Width="300"/>

但出于某种原因,我永远无法解决这个问题。我试图拦截上下文菜单,所以我可以改变它(它的上下文敏感),并且我真的试图避免在任何地方使用控件来连接事件 - 当然这是可能的吗?

1 个答案:

答案 0 :(得分:2)

原则上,您需要在创建对象时将Context Menu显式设置为null:

public MyTextBox()
{
    this.ContextMenu = null;
    this.Initialized += (s, e) =>
        ContextMenuOpening += new ContextMenuEventHandler(MyTextBox_ContextMenuOpening);
}

然后它起作用:)