2010-04-21 57 views
0

我已经写了一个自定义控件的问题,当我以编程方式将其挂起时,未触发它的ContextMenuOpening事件。中的控制基本上为标准文本框的包装:WPF自定义文本框ContextMenuOpening问题

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"/> 

出于某种原因,虽然,我永远无法得到的事件触发。我试图拦截上下文菜单,所以我可以改变它(它是上下文敏感的),并且实际上是试图避免在使用控制的任何地方连接事件 - 当然这是可能的?

回答

2

原来你需要显式设置的ContextMenu创建对象时为null:

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

然后它的工作原理治疗:)