我遇到了一个自定义控件的问题,当我以编程方式挂起它时,我写的并没有触发它的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"/>
但出于某种原因,我永远无法解决这个问题。我试图拦截上下文菜单,所以我可以改变它(它的上下文敏感),并且我真的试图避免在任何地方使用控件来连接事件 - 当然这是可能的吗?
答案 0 :(得分:2)
原则上,您需要在创建对象时将Context Menu显式设置为null:
public MyTextBox()
{
this.ContextMenu = null;
this.Initialized += (s, e) =>
ContextMenuOpening += new ContextMenuEventHandler(MyTextBox_ContextMenuOpening);
}
然后它起作用:)