我希望允许用户将ConnectionSettingsTask项目固定到起始页面,然后通过按“开始”页面上的相应磁贴导航到该特定的ConnectSettingsTask。我的问题是,一旦用户导航到相应的ConnectionSettingsTask页面,用户就无法使用硬件后退按钮直接导航回起始页面。出于某种原因,应用程序一遍又一遍地加载相同的ConnectionSettingsTask页面。我现在的实施如下:
MainPage.xaml.cs中
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
string _title = null;
NavigationContext.QueryString.TryGetValue("Param", out _title);
if (_title != null)
{
ConnectionSettingsTask connectionSettingsTask = new ConnectionSettingsTask();
switch (_title)
{
case "WiFi":
connectionSettingsTask.ConnectionSettingsType = ConnectionSettingsType.WiFi;
connectionSettingsTask.Show();
break;
...
}
try
{
//NavigationService.RemoveBackEntry();
//_title = null;
NavigationContext.QueryString.Remove(_title);
}
catch(InvalidOperationException ex)
{
MessageBox.Show(ex.Message);
}
}
}
private void CreateLiveTile(TileItem item)
{
var title = item.Title.ToString();
string tileParameter = "Param=" + item.Title.ToString();
ShellTile Tile = CheckIfTileExist(tileParameter); // Check if Tile's title has been used
if (Tile == null)
{
//choose which original background tile image to use
switch (title)
{
case "WiFi":
background = new Uri("/Images/Mode/Mode_WiFi.png", UriKind.Relative);
break;
...
}
try
{
var LiveTile = new StandardTileData
{
Title = item.TileName,
BackgroundImage = background,
BackTitle = item.TileName,
//BackBackgroundImage = new Uri("/background.png", UriKind.Relative),
BackContent = item.Message,
};
ShellTile.Create(new Uri("/View/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;
}
因此,基本上创建磁贴并将辅助磁贴固定到开始屏幕的工作,以及从辅助磁贴加载WiFI ConnectionSettingsTask。但是当我尝试从ConnectionSettingsTask页面导航回来时,它只是不断重新加载该页面。我如何根据Windows Phone硬件后退按钮认证要求修复此问题(在此方案中必须返回到启动屏幕)?
答案 0 :(得分:1)
任务一次又一次地加载,因为每次回到任务页面时,都要调用navigatedto函数,该函数调用ConnectionSettingsTask,无论导航模式是新的还是返回模式。
确保您打开任务,当导航模式是新的时,就像代码一样:
base.OnNavigatedTo(e);
if (e.NavigationMode == System.Windows.Navigation.NavigationMode.New)
{
// Open Task
}
........................................我之后无法添加我的评论你的:
如果从连接设置任务返回主页,您想要返回起始页吗?
您可以知道最后一页是否是任务页面。
if (e.NavigationMode == System.Windows.Navigation.NavigationMode.New)
{
// Open Task
_fromTask = true;
}
else if(e.NavigationMode==System.Windows.Navigation.NavigationMode.Back&&_fromTask)
{
// exit your app .
}
答案 1 :(得分:0)
我认为,当您按下后退按钮时,它将返回到您最初导航到的主页面。在主页面中,您有重定向逻辑,因此它再次进入您的ConnectSettingsTask页面
为什么不能为您的辅助磁贴设置ConnectSettingsTask页面URL以及tile参数..我认为它应该可以工作..
答案 2 :(得分:-1)
试试这段代码。通过一些修改,您可以将此代码用于您的场景。
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
while (NavigationService.BackStack.Count() >= 1)
NavigationService.RemoveBackEntry();
}