如何在创建辅助磁贴时设置导航URI?(Windows Phone 8.1-通用)
本文关键字:URI Windows Phone 1-通用 导航 设置 创建 | 更新日期: 2023-09-27 18:20:53
假设我有一个特定的页面,SecondaryTime.xaml。从这个页面我将一个辅助磁贴固定到启动屏幕。现在,如果我点击辅助磁贴,我希望它打开SecondaryFile.xaml.
在WP8.0中,这可以通过设置Shell.Create的URI来实现。例如:
ShellTile.Create(new Uri("/SecondaryTile.xaml?Parameter=FromTile", UriKind.Relative), NewTileData);
}
但看起来这在WinRT中不再受支持。
我看到一个使用该参数启动的示例(它在Mainpage.xaml.cs上的OnNavigatedTo中获取参数),但由于新的应用程序行为,该应用程序被挂起,因此OnNavigatedTo并不总是触发。
希望有人能帮忙。
谨致问候,Niels
这难道不应该作为应用程序逻辑来完成吗?
检查应用程序代码背后的OnLaunched方法中的LaunchActivatedEventArgs参数:
protected override async void OnLaunched(LaunchActivatedEventArgs args)
{
ApplicationData.Current.LocalSettings.Values[Constants.APP_PARAMETERS] = args.Arguments;
// Do not repeat app initialization when already running, just ensure that
// the window is active
if (args.PreviousExecutionState == ApplicationExecutionState.Running)
{
Window.Current.Activate();
await ViewManager.Instance.LaunchView();
return;
}
考虑实现某种类型的ViewManager来管理启动视图:
public class ViewManager
{
#region Singleton
private ViewManager()
{
}
static ViewManager _viewManager = null;
public static ViewManager Instance
{
get
{
if (_viewManager == null)
{
_viewManager = new ViewManager();
}
return _viewManager;
}
}
#endregion
public async Task LaunchView()
{
bool displaySubheader = false;
var displayBackbutton = false;
var arguments = ApplicationData.Current.LocalSettings.Values[Constants.APP_PARAMETERS] as string;
var argumentsExist = !string.IsNullOrEmpty(arguments);
if (!argumentsExist)
{
await UIServices.Instance.Load(typeof(HomePage), null, displaySubheader, displayBackbutton);
}
else
{
displaySubheader = true;
displayBackbutton = false;
await UIServices.Instance.Load(typeof(GroupPage), arguments, displaySubheader, displayBackbutton);
var groupId = new Guid(arguments);
await ReadPost(groupId);
}
}
。.
以下是我如何创建二次平铺:
SecondaryTile secondaryTile =
new SecondaryTile(group.GroupId.ToString(),
group.Name,
group.Name,
group.GroupId.ToString(),
TileOptions.ShowNameOnWideLogo,
new Uri("ms-appx:///Assets/Logo.png"),
new Uri("ms-appx:///Assets/WideLogo.scale-100.png"));
var successful = await secondaryTile.RequestCreateAsync();
您无法从OnNavigatedTo事件直接导航到另一个页面。但是,您可以将导航添加为UI线程上的排队事件。
在OnNavigatedTo事件处理程序中,检查以下内容(您的测试可能需要更复杂一点,因为在本例中并没有考虑到所有可能发生的事件,例如e.参数为null)。
if (e.Parameter.ToString().Contains("something_from_secondary_tile_arguments") && (e.NavigationMode == NavigationMode.New))
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { Current.Frame.Navigate(typeof(Transactions), "data_for_your_sub_page"); });
}
此外,在创建SecondaryFile时,还需要指定Arguments属性。
此处的更多信息:无法使用c#导航到Windows Metro应用程序上的页面