Тост Не отправка параметра на страницу при нажатии и приложение уже открыто 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();