我已经在我的应用程序中实现了辅助磁贴,因此用户可以将辅助磁贴固定到开始屏幕,然后相应地导航到我的应用程序中的相应页面。这个实现工作正常,除了当用户从固定的辅助磁贴导航到特定页面后点击返回硬件按钮时,什么都没有发生?事实上,虽然用户是从开始屏幕来的,但应用程序中的前一页实际上会显示一秒钟。如用户期望的那样实际返回到开始屏幕的正确方法是什么(我假设这将是正确的返回堆栈导航)?
我所拥有的内容如下,但仅适用于正常页面导航场景,而不是当用户从开始屏幕固定磁贴导航到 SharePage 时。
MainPage.xaml.cs
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
string _title = null;
NavigationContext.QueryString.TryGetValue("Param", out _title);
if (_title != null)
{
switch (_title)
{
case "status":
this.NavigationService.Navigate(new Uri("/Views/ShareStatusPage.xaml", UriKind.Relative));
break;
case "link":
this.NavigationService.Navigate(new Uri("/Views/ShareLinkPage.xaml", UriKind.Relative));
break;
}
}
}
private void CreateLiveTile(TileItem item)
{
string tileParameter = "Param=" + item.Title.ToString();
ShellTile Tile = CheckIfTileExist(tileParameter); // Check if Tile's title has been used
if (Tile == null)
{
try
{
var LiveTile = new StandardTileData
{
Title = item.TileName,
//BackgroundImage = ((System.Windows.Media.Imaging.BitmapImage)hubtile.Source).UriSource,
BackgroundImage = new Uri(item.ImageUri.ToString(), UriKind.Relative),
//Count = 1,
BackTitle = item.TileName,
//BackBackgroundImage = new Uri("", UriKind.Relative),
BackContent = item.Message,
};
ShellTile.Create(new Uri("/MainPage.xaml?" + tileParameter, UriKind.Relative), LiveTile); //pass the tile parameter as the QueryString
}
catch (Exception)
{
MessageBox.Show("This tile could not be pinned", "Warning", MessageBoxButton.OK);
}
}
else
{
MessageBox.Show("This tile has already been pinned", "Notice", MessageBoxButton.OK);
}
}
private ShellTile CheckIfTileExist(string tileUri)
{
ShellTile shellTile = ShellTile.ActiveTiles.FirstOrDefault(tile => tile.NavigationUri.ToString().Contains(tileUri));
return shellTile;
}
SharePage.xaml.cs
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
base.OnBackKeyPress(e);
//return to the previous page in the phones back stack?
if (NavigationService.CanGoBack)
{
e.Cancel = true;
NavigationService.GoBack();
}
//else
//{
// ??
//}
}
到目前为止,CreateLiveTile()
方法创建了辅助磁贴,然后当按下该磁贴时,将导航到 MainPage,然后在 MainPage OnNavigatedTo 事件中检查查询字符串,然后根据单击的辅助磁贴加载相应的页面。执行此操作并加载相应页面后,我无法再按后退按钮返回开始屏幕以遵循标准的 backstack 行为。我怎样才能解决这个问题?