ContextMenu на нажатие вместо нажатия и удерживайте с помощью кнопки управления - PullRequest
2 голосов
/ 15 сентября 2011

Я пытаюсь применить ту же идею, объясняя этот вопрос. 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;
    } 
}

И на самом деле, просто использование примера кода с Border-контролем дает мне то же самое 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, поэтому любая помощь будет оценена!

Ответы [ 2 ]

4 голосов
/ 19 октября 2011

Та же проблема здесь.

Ошибка вызвана этим кодом:

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

в этот момент OnApplyTemplate() не был вызван, поэтому _outerPane l равно нулю.

Проблему можно решить, проверив, является ли она нулевой, и перекомпилировав инструментарий.

К сожалению, Microsoft отказывается решить проблему

... Stefan

1 голос
/ 29 ноября 2011

Я бы предложил две вещи:

1) В наборе инструментов Silverlight 7.1 есть ошибка, поэтому вы получаете исключение при вызове контекстного меню из чего-либо еще, кроме события hold.

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

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