2011-06-13 2 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에서 할당하지 않는 이유는 무엇입니까? –

답변

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; 
    } 
} 

을 추신 "입력 됨"은 단어가 아닙니다.

+0

아니요 .. 전혀 작동하지 않습니다. – user1034912

2

MouseDown 이벤트를 처리하도록 표시하지 않았기 때문일 수 있습니다. e.Handledtrue으로 설정하면 더 이상 전달되지 않으며 ContextMenu은 계속 열어 둘 수 있습니다.

즉, 이것은 처음에 ContextMenu을 할당하는 끔찍한 방법입니다. 왜 이렇게하지 않을까요?

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

XAML을 기반으로 OP에서 MouseDown을 처리하고 있습니다. 즉각적인 문제는 상황에 맞는 메뉴가 컨트롤에 할당되지 않았으며 위치가 설정되지 않았기 때문입니다. 즉, XAML에 여기에 지정해야합니다. –

+0

@Ed : 그는 라우트 된 이벤트를 처리 된 것으로 표시하지 않으므로 계속해서 시각적 트리를 버블 링합니다. 다른 컨트롤이이를 처리 할 것이고,이 결과로 'ContextMenu'가 닫히게된다고 가정하고 있습니다. –

+0

아, 좋은 지적입니다. –

관련 문제