2011-09-15 1 views
2

버튼 컨트롤을 사용하여이 애플리케이션에 ContextMenu on tap instead of tap and hold 같은 종류의 아이디어를 설명하려고합니다.버튼 컨트롤로 탭하여 누르고 누르는 대신 ContextMenu를 사용합니다.

그러나 아래 코드를 실행할 때 NullRefrenceException이 표시됩니다.

<Button Content="Menu" Margin="0,0,316,699" Grid.Row="1" x:Name="MenuButton" > 
    <toolkit:GestureService.GestureListener> 
     <toolkit:GestureListener Tap="GestureListener_Tap" /> 
    </toolkit:GestureService.GestureListener> 
    <toolkit:ContextMenuService.ContextMenu> 
     <toolkit:ContextMenu> 
      <toolkit:MenuItem Header="Add to Favorite" Click="AddFavorite_Click"/> 
      <toolkit:MenuItem Header="Samples" Click="Samples_Click"/> 
      <toolkit:MenuItem Header="Send to friends" Click="SendToFriends_Click"/> 
      <toolkit:MenuItem Header="Links" Click="Links_Click"/> 
     </toolkit:ContextMenu> 
    </toolkit:ContextMenuService.ContextMenu> 
</Button> 

private void GestureListener_Tap(object sender, Microsoft.Phone.Controls.GestureEventArgs e) 
{ 
    Button button = sender as Button; 
    ContextMenu contextMenu = ContextMenuService.GetContextMenu(button); 

    if (contextMenu.Parent == null) 
    { 

     contextMenu.IsOpen = true; 
    } 
} 

그리고 실제로, 단지 국경 통제와 샘플 코드를 사용하는 것은 나에게 어떤 이유로 같은 NullReferenceException을 제공합니다. 아래는 예외와 함께 얻을 스택입니다.

at Microsoft.Phone.Controls.ContextMenu.UpdateVisualStates(Boolean useTransitions) 

at Microsoft.Phone.Controls.ContextMenu.OnOpened(RoutedEventArgs e) 

at Microsoft.Phone.Controls.ContextMenu.<OpenPopup>b__12(Object s, EventArgs e) 

at MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, 
Object sender, Object args) 

at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName) 

코드를 작동시키는 방법에 대해 도움을 줄 수 있습니까? Windows Phone 앱 개발에 익숙하지 않으므로 도움을 받으실 수 있습니다!

+0

어떤 줄이 오류입니까? –

+0

위의 스택 추적을 추가했습니다. 나는 라인이 사라진 후에이 예외를 얻는다. 정말 바보 같은 짓을하고있을거야 .. – Meimio

답변

4

같은 문제가 있습니다.

버그는이 코드에 의해 발생되어 그 시점 OnApplyTemplate()에서

private void UpdateVisualStates(bool useTransitions) 
[..] 
_outerPanel.Orientation = Orientation.Vertical; 

호출되지 않은 널 될 _outerPane리터 원인.

문제가 null인지 확인하고 툴킷을 다시 컴파일하여 문제를 해결할 수 있습니다. 실버 라이트 툴킷 7.1에서 버그가 호출 할 때 그래서 당신은 예외가 있습니다

1) :

불행하게도 마이크로 소프트는 내가 두 가지를 제안 할 것 problem

... 스테판

1

를 해결하기 위해 거부된다 이벤트를 보류하는 것에서부터의 컨텍스트 메뉴. 그것은 당신이 버튼을 브래킷에 컨텍스트 메뉴를 넣고, 다시 7.0 실버 라이트 툴킷에 갈 필요 없다 홀드 이벤트

2)에 복사 그냥 같이

<Button Content="Menu" Margin="0,0,316,699" Grid.Row="1" x:Name="MenuButton" Hold="MenuButton_Hold"/> 

    <toolkit:ContextMenuService.ContextMenu> 
     <toolkit:ContextMenu> 
      <toolkit:MenuItem Header="Add to Favorite" Click="AddFavorite_Click"/> 
      <toolkit:MenuItem Header="Samples" Click="Samples_Click"/> 
      <toolkit:MenuItem Header="Send to friends" Click="SendToFriends_Click"/> 
      <toolkit:MenuItem Header="Links" Click="Links_Click"/> 
     </toolkit:ContextMenu> 
    </toolkit:ContextMenuService.ContextMenu> 

C# 코드는 괜찮습니다.

<Button Content="Menu" Margin="0,0,316,699" Grid.Row="1" x:Name="MenuButton" Click="MenuButton_Click"/> 

    <toolkit:ContextMenuService.ContextMenu> 
     <toolkit:ContextMenu> 
      <toolkit:MenuItem Header="Add to Favorite" Click="AddFavorite_Click"/> 
      <toolkit:MenuItem Header="Samples" Click="Samples_Click"/> 
      <toolkit:MenuItem Header="Send to friends" Click="SendToFriends_Click"/> 
      <toolkit:MenuItem Header="Links" Click="Links_Click"/> 
     </toolkit:ContextMenu> 
    </toolkit:ContextMenuService.ContextMenu>