2009-12-10 2 views
1

나는 다음과 같이 내가 숨기고 ContextMenu에서 signle MenuItem를 표시하는 간단한 시나리오가 있습니다WPF 이상한 MenuItem의 가시성 문제

XAML :

<Window x:Class="Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Window1" Height="300" Width="300"> 
    <Window.ContextMenu> 
     <ContextMenu Name="mainMnu"> 
      <MenuItem Name="mnu" Header="Testing"/> 
     </ContextMenu> 
    </Window.ContextMenu> 

    <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <Button HorizontalAlignment="Left" Margin="52,131,0,108" Name="Button1" 
       Width="75">Button</Button> 
    </Grid> 
</Window> 

코드 뒤에를 :

Private Sub Button1_Click(ByVal sender As System.Object, 
          ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click 
    If mnu.Visibility = Windows.Visibility.Visible Then 
     mnu.Visibility = Windows.Visibility.Collapsed 
     mainMnu.Visibility = Windows.Visibility.Collapsed 
    Else 
     mnu.Visibility = Windows.Visibility.Visible 
     mainMnu.Visibility = Windows.Visibility.Visible 
    End If 

End Sub 

문제는을 누를 때마다 MenuItem이 표시되지 않습니다. 오른쪽 클릭은 작은 빈 사각형 만 보여줍니다. (보이는 메뉴가있는 것처럼 보이지만 보이지 않는 것은 MenuItem입니다). 어떻게 든 순환 ... 처음 2 클릭 : 문제, 다음 2 클릭 OK 등등 ...

아이디어가 있으십니까?

답변

3

상황에 맞는 메뉴를 사용하지 않으려면 Visibility을 설정하는 것이 잘못된 방법입니다.

대신 ContextMenu 속성을 Nothing으로 설정해야합니다.

예를 들어

: 내 예를 들어 잘 작동

If ContextMenu Is Nothing Then 
    ContextMenu = mainMnu 
Else 
    ContextMenu = Nothing 
End If 
+0

...하지만 첨부 보이는 메뉴 아이템이 나던 경우의 ContextMenu이 전혀 발생하지 할 수있는 방법이 있다면 난 여전히 궁금합니다. – Entrodus

+0

코드 숨김을 통해 메뉴 항목을 제어 할 수 있으므로 가시성 설정을 사용하여 컨텍스트 메뉴를 비활성화하거나 활성화 할 수 있습니까? 즉, 창을 만들 때 null로 설정하고 메뉴 항목을 표시 할 때 mainMnu로 설정합니까? 여기서 명백한 문제는 동적으로 상황을 보거나 보이지 않게 만들 수 있으므로 추적해야합니다. 이벤트를 통해 ContextMenu가 표시되는지 확인하고 있습니다. 나는 당신이 자식 menuitem 가시성을 검사하여 터널링 이벤트를 처리 할 수 ​​있었으면 좋겠다. 그리고 처리 된 것을 envent로 설정했지만 짧게되었다. – Dave