2011-06-13 144 views
0

我有一個上下文菜單,但它在出現後立即消失。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

回答

0

您應該分配您的菜單設置爲您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

2

很可能是因爲你沒有標記要處理的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