ContextMenu在出现后立即消失

问题描述:

我有一个上下文菜单,但它在出现后立即消失。ContextMenu在出现后立即消失

<TextBlock Name="InputtedAddress" Text="{Binding Path=InputtedAddress}" MouseDown="InputtedAddress_MouseDown"/> 
System.Windows.Controls.ContextMenu thisMenu; 
    private void InputtedAddress_MouseDown(object sender, MouseButtonEventArgs e) 
     { 
      if (e.RightButton == MouseButtonState.Pressed) 
      { 
       thisMenu = new System.Windows.Controls.ContextMenu(); 
       MenuItem thisMenuItem = new MenuItem() { Header = "Zoom to Incident" }; 
       thisMenuItem.Click += new RoutedEventHandler(thisMenuItem_Click); 
       thisMenu.Items.Add(thisMenuItem); 
       thisMenu.IsOpen = true; 
      } 
     } 
+0

你为什么要创建和填充上下文菜单?为什么不把它分配给XAML? – 2011-06-13 16:21:47

您应该分配您的菜单设置为您TextBlock,使得开口和定位会照顾你的ContextMenu财产。您也不需要在每个MouseDown中创建菜单;只需创建一次并将其分配给ContextMenu属性。

在XAML:

<TextBlock 
    Name="InputtedAddress" 
    Text="{Binding Path=InputtedAddress}" 
    > 
    <TextBlock.ContextMenu> 
     <ContextMenu> 
      <MenuItem 
       Header="Zoom to Incident" 
       Click="ContextMenu_Click" 
      /> 
     </ContextMenu> 
    </TextBlock.ContextMenu> 
</TextBlock> 

如果你想手动显示它您需要显示它通过设置PlacementTarget财产,这样的事情之前,它定位:

private void InputtedAddress_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    if (e.RightButton == MouseButtonState.Pressed) 
    { 
     thisMenuPlacementTarget = InputtedAddress; 
     thisMenu.IsOpen = true; 
    } 
} 

PS “输入”不是一个字:)

+0

nope ..根本不起作用 – user1034912 2017-02-25 03:56:14

很可能是因为你没有标记要处理的MouseDown事件。将e.Handled设置为true,它不会再传播,并且您的ContextMenu将保持打开状态。

这就是说,这是一个可怕的方式来首先分配ContextMenu。为什么不这样做:

<TextBlock ...> 
    <TextBlock.ContextMenu> 
     <ContextMenu> 
      <MenuItem Header="Zoom to Incident" Click="thisMenuItem_Click"/> 
     </ContextMenu> 
    </TextBlock.ContextMenu> 
</TextBlock> 
+0

OP基于XAML处理MouseDown。 (即时)问题是上下文菜单未分配给任何控件,其位置从未设置。也就是说,它应该只在XAML中分配。 – 2011-06-13 16:26:13

+0

@Ed:他没有将路由事件标记为已处理,因此它将继续冒泡视觉树。另一个控件将处理它,并且我假设这会导致ContextMenu被关闭。 – 2011-06-13 16:29:36

+0

啊,好点。 – 2011-06-13 17:24:14