2011-09-15 193 views
2

我試圖在我的應用程序中使用按鈕控件將同一種想法解釋到這個問題上 ContextMenu on tap instead of tap and holdContextMenu點擊而不是點擊並按住按鈕控制

但是,執行下面的代碼時我得到了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

同樣的問題在這裏。

該錯誤是通過該代碼引起的:

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

在這一點上OnApplyTemplate()沒有被調用,從而導致_outerPane升爲空。

該問題可以通過檢查是否爲空並重新編譯工具包來解決。

不幸的是微軟目前拒絕修復problem

...斯特凡

1

我建議兩兩件事:

1)有錯誤在Silverlight工具包7.1,所以你打電話時得到一個異常從保持事件以外的任何其他上下文菜單。

<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#代碼是確定的,因爲它僅僅是將它複製到按住事件

2)你不必把上下文菜單中的按鈕支架,並返回到7.0 Silverlight工具包。

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