0

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

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

创建瓷砖

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 - 主页

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 个页面?问题可能出在哪里?

谢谢

4

1 回答 1

1

除了清除导航上下文之外,您还可以使用该NavigationMode属性来了解它是对页面的新导航(例如,形成辅助磁贴)还是用户从另一个页面返回:

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);
        }
    }
}
于 2013-09-16T10:07:31.483 回答