Событие ApplicationBarIconButton не запускается после задачи выбора - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть глобальная панель приложений в моем App.xaml.Одна из кнопок вызывает PhoneNumberChooserTask-

    private void AppBarContacts_Click(object sender, EventArgs e)
    {
        PhoneNumberChooserTask chooserTask = new PhoneNumberChooserTask();
        chooserTask.Completed += new EventHandler<PhoneNumberResult>(chooserTask_Completed);
        chooserTask.Show(); 
    }

, и результат передается на

    void chooserTask_Completed(object sender, PhoneNumberResult e)
    {
        string phoneNumber = "";

        if ((TaskResult.Cancel != e.TaskResult) && (TaskResult.None == e.TaskResult))
        {
            phoneNumber = e.PhoneNumber;
        }

        PhoneApplicationFrame root = (PhoneApplicationFrame)Application.Current.RootVisual;
        root.Navigate(new Uri("/MainPage.xaml?number=" + phoneNumber, UriKind.Relative));
    }

После этой навигации, однако, событие нажатия ApplicationBarIconButton больше не срабатывает. Это говорит о том, что это известная проблема, но обходные решения показывают, что я не могу использовать, потому что не могу получить доступ к NavigationService из App.xaml.cs.

Я могу обойти это, имея страницу, которая ничего не делает, кроме запуска задачи (я попытался добавить флаг типа "/MainPage.xaml?getnumber=1" и сделать это там, но он вызывается снова, когдаchooser возвращается, поэтому он просто зацикливается навсегда) но это означает, что перед запуском chooser вы получаете чистую страницу, которая выглядит не очень хорошо.

Есть ли лучшее решение?

1 Ответ

1 голос
/ 06 февраля 2012

Проблема в подписке на событие NavigationService.Navigated, то есть событие PhoToChooserTask.Completed возникает до OnNavigatedTo, поэтому, если вы вызываете root.Navigate, возникает странное поведение.

Обходной путь для этого заключается в вызове root.Navigate в первом кадре (после OnNavigatedTo и т. Д.). Deployment.Current.Dispatcher.BeginInvoke может использоваться для этого, поэтому полный код:

Deployment.Current.Dispatcher.BeginInvoke(() =>
{
    root.Navigate(new Uri("/MainPage.xaml?number=" + strNumber, UriKind.Relative));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...