辅助磁贴导航Windows Phone 8

时间:2013-09-16 09:57:19

标签: c# windows-phone-8 tile

当我从辅助磁贴导航到我的应用时,我遇到了问题。瓷砖已创建并具有导航uri。现在我有一个问题:

在“navigateTo”上,我测试特定字符串的navigationcontext。如果字符串有数字,我会拨打这个号码。我遇到的第一个问题是当我导航到应用程序内的其他页面(首次点击辅助磁贴后)然后返回主页时,它也会尝试调用该号码,因为navigationcontext与我点击时相同二级瓷砖。 如果我在第一次单击辅助磁贴后清除了navigationcontext,则导航将起作用。但是,如果我暂停应用程序而不是再次单击辅助磁贴,则navigationcontext为空,因此不会调用任何数字。

创建图块

IconicTileData tileData = new IconicTileData
{
    Title = App.MainViewModel.SelectedPOI.Name,
    SmallIconImage = new Uri("/Assets/Images/feature.phone.png", UriKind.Relative),
    WideContent1 = App.MainViewModel.SelectedPOI.Name,
    WideContent2 = App.MainViewModel.SelectedPOI.Telefonnumber,
    WideContent3 = App.MainViewModel.SelectedPOI.Street
};
if (App.MainViewModel.SelectedPOI.Id == -1)
    tileData.BackgroundColor = Helper.GetColorFromHexString("#E46D1D");
else
    tileData.BackgroundColor = Helper.GetColorFromHexString("#4FAE32");

string SecondaryTileUriSource = String.Format("Source={0}&ID={1}", TILESTATUS, App.MainViewModel.SelectedPOI.Id);

//check if tile exist
ShellTile tile = Helper.FindTile(SecondaryTileUriSource);
if (tile == null)
{
    // having a unique NavigationUri is necessary for distinguishing this tile
    string tileUri = string.Concat("/MainPage.xaml?", SecondaryTileUriSource);
    ShellTile.Create(new Uri(tileUri, UriKind.Relative), tileData, true);
}

OnNavigateTo - MainPage

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    string status = String.Empty;
    if (NavigationContext.QueryString.TryGetValue("Source", out status))
    {
        MainPivot.SelectedItem = AlarmPivotItem;
        //App.MainViewModel.StartAlarm();
        //or
        //get the number from source/status...
        App.MainViewModel.CallNumber(12345);
        //NavigationContext.QueryString.Clear();
    }
}

有人举例如:从辅助磁贴调用一个数字,应用程序内可能至少有2个页面? 还有其他问题可以解决问题吗?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用NavigationMode属性来知道它是否是页面的新导航(例如,形成辅助磁贴),或者用户是否从其他页面返回时,而不是清除导航上下文: / p>

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    if (e.NavigationMode != System.Windows.Navigation.NavigationMode.Back)
    {
        if (NavigationContext.QueryString.TryGetValue("Source", out status))
        {
            MainPivot.SelectedItem = AlarmPivotItem;
            //App.MainViewModel.StartAlarm();
            //or
            //get the number from source/status...
            App.MainViewModel.CallNumber(12345);
        }
    }
}