出现后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;
            }
        }
    
已邀请:
        您应该将菜单分配给
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;
    }
}
附言\“输入\”不是单词:)     
        可能是因为您没有将要处理的“ 6”事件标记为要处理。将
e.Handled
设置为
true
,它将不再传播,并且ѭ3and将保持打开状态。 就是说,这是分配
ContextMenu
的可怕方法。为什么不这样做:
<TextBlock ...>
    <TextBlock.ContextMenu>
        <ContextMenu>
            <MenuItem Header=\"Zoom to Incident\" Click=\"thisMenuItem_Click\"/>
        </ContextMenu>
    </TextBlock.ContextMenu>
</TextBlock>
    

要回复问题请先登录注册