C# ContextMenu出现后立即消失
我有一个上下文菜单,但它出现后立即消失C# ContextMenu出现后立即消失,c#,wpf,xaml,contextmenu,C#,Wpf,Xaml,Contextmenu,我有一个上下文菜单,但它出现后立即消失 System.Windows.Controls.ContextMenu此菜单; 私有void inputedAddress_MouseDown(对象发送方,MouseButtonEventArgs e) { 如果(e.RightButton==MouseButtonState.Pressed) { thisMenu=new System.Windows.Controls.ContextMenu(); MenuItem thisMenuItem=new
System.Windows.Controls.ContextMenu此菜单;
私有void inputedAddress_MouseDown(对象发送方,MouseButtonEventArgs e)
{
如果(e.RightButton==MouseButtonState.Pressed)
{
thisMenu=new System.Windows.Controls.ContextMenu();
MenuItem thisMenuItem=new MenuItem(){Header=“缩放到事件”};
thisMenuItem.Click+=新建路由EventHandler(thisMenuItem\u Click);
thisMenu.Items.Add(thisMenuItem);
thisMenu.IsOpen=true;
}
}
您应该将菜单指定给文本块的属性,以便为您打开和定位。您也不需要在每次鼠标按下时创建菜单;只需创建一次,并将其分配给ContextMenu
属性
在XAML中:
如果要手动显示,则需要在显示前通过设置属性对其进行定位,如下所示:
private void InputtedAddress_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.RightButton == MouseButtonState.Pressed)
{
thisMenuPlacementTarget = InputtedAddress;
thisMenu.IsOpen = true;
}
}
注意,“Inputed”不是一个单词:)这可能是因为您没有标记要处理的MouseDown
事件。将e.Handled
设置为true
,它将不再传播,您的上下文菜单将保持打开状态
这就是说,首先分配ContextMenu
是一种糟糕的方式。为什么不这样做:
<TextBlock ...>
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header="Zoom to Incident" Click="thisMenuItem_Click"/>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
为什么要这样创建和填充上下文菜单?为什么不在XAML中分配它呢?基于XAML,OP正在处理MouseDown。(直接的)问题是上下文菜单未指定给任何控件,并且其位置从未设置。这就是说,它应该在这里的XAML中分配。@Ed:他没有将路由事件标记为已处理,因此它将继续在可视化树中冒泡。另一个控件将处理它,我假设这会导致ContextMenu
关闭。