Тост Не отправка параметра на страницу при нажатии и приложение уже открыто C#

У меня есть универсальное приложение Windows Phone 8.1, которое получает push-уведомления. При нажатии на тост открывается приложение и отправляется параметр на определенную страницу. Моя проблема в том, что это работает, только если приложение выключено, когда я нажимаю на тост. Если приложение открывается, когда я получаю уведомление и щелкаю его, оно направляет меня в приложение, но не отправляет параметр на определенную страницу (ImageFullScreen). Знаете ли вы, что нужно сделать, чтобы достичь этого?

App.xaml.cs:

sealed partial class App : Application
{
    public string NavigateText { get; set; }

    public App()
    {
        this.InitializeComponent();
        this.Suspending += OnSuspending;

    }

    protected override void OnLaunched(LaunchActivatedEventArgs e)
    {
        var launchString = e.Arguments;
        (App.Current as App).NavigateText = launchString.ToString();

        if (System.Diagnostics.Debugger.IsAttached)
        {
            this.DebugSettings.EnableFrameRateCounter = true;
        }


        Frame rootFrame = Window.Current.Content as Frame;

        if (rootFrame == null)
        {
            // Create a Frame to act as the navigation context and navigate to the first page
            rootFrame = new Frame();
            // Set the default language
            rootFrame.Language = Windows.Globalization.ApplicationLanguages.Languages[0];

            rootFrame.NavigationFailed += OnNavigationFailed;

            if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
            {
                //TODO: Load state from previously suspended application
            }

            // Place the frame in the current Window
            Window.Current.Content = rootFrame;
        }

        if (rootFrame.Content == null)
        {
            // When the navigation stack isn't restored navigate to the first page,
            // configuring the new page by passing required information as a navigation
            // parameter
            rootFrame.Navigate(typeof(MainPage), e.Arguments);
        }
        // Ensure the current window is active
        Window.Current.Activate();

    }

MainPage.xaml.cs:

    protected override async void OnNavigatedTo(NavigationEventArgs e)
    {
        if ((App.Current as App).NavigateText == "")
        {
            await RefreshTodoItems();
        }
        else
        {
            items2 = await todoTable
                .Where(todoItem => todoItem.Text == (App.Current as App).NavigateText)
                .ToCollectionAsync();
            TodoItem myItem = items2[0] as TodoItem;
            Frame.Navigate(typeof(ImageFullScreen), myItem);
        }           
    }

ImageFullScreen.Xaml.Cs:

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        var myObject = (TodoItem)e.Parameter;
        img.Source = new BitmapImage(new Uri(myObject.ImageUri));

        (App.Current as App).NavigateText = "";
    }

1 ответ

Решение

Проблема в том, что if (rootFrame.Content == null) в OnLaunched метод не выполняется, потому что приложение уже было открыто (содержимое фрейма было страницей). Только окно активировано и OnNavigatedTo метод в MainPage не называется.

Вы можете попробовать начать навигацию в OnLaunched метод всегда такой (без оператора if):

rootFrame.Navigate(typeof(MainPage), e.Arguments);
// Ensure the current window is active
Window.Current.Activate();
Другие вопросы по тегам