我正在构建一个带有SecondaryTile
的应用,以使用一些参数启动它。
我需要一种方法来了解MainPage
是否已从SecondaryTile
启动,因此我尝试使用{{1}来查看是否有Argument
OnNavigatedTo
方法。
问题是,只有当应用程序从挂起状态启动时才会触发此事件,这意味着如果按下Windows按钮然后在10秒之前点击磁贴,则不会触发该事件。
这同样适用于Loaded
事件和NavigationHelper_LoadState
hanlder,因此我不知道如何让页面知道它是从SecondaryTile
启动的。< / p>
我知道我可以从App
OnLaunched
事件中获取此信息,但我仍然不知道如何将其传递给MainPage
,因为似乎没有方法在页面显示后调用。
即使sample provided by Microsoft失败了,因为它使用构造函数和OnNavigatedTo
处理程序,而且我不知道如何使其工作。
答案 0 :(得分:1)
将激活参数存储在App
类...
internal static LaunchActivatedEventArgs LaunchArgs = null;
protected override async void OnLaunched(LaunchActivatedEventArgs e)
{
LaunchArgs = e;
// rest of method
...并从目标网页的OnNavigatedTo
方法中读取它们(您链接到的示例中的“方案5”):
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (App.LaunchArgs != null && !String.IsNullOrEmpty(App.LaunchArgs.Arguments))
InputText.Text += Environment.NewLine + "Launched from secondary tile"
+ Environment.NewLine + DateTime.Now.ToString("hh:mm:ss");
else
InputText.Text += Environment.NewLine + "No launch info available"
+ Environment.NewLine + DateTime.Now.ToString("hh:mm:ss");
// rest of method
请注意,如果您支持其他激活类型(文件,协议等),则在这些情况下您需要清空LaunchArgs
字段。
答案 1 :(得分:0)
由于OnNavigatedTo
在从之前的Running
状态启动应用时未被触发,因此我必须使用此OnLaunched
方法APp.xaml.cs
方法强制导航{1}}:
if (rootFrame.Content == null)
{
// Default generated code
}
else
{
if (e.PreviousExecutionState == ApplicationExecutionState.Running)
{
if (!string.IsNullOrEmpty(e.Arguments))
if (!rootFrame.Navigate(typeof (MainPage), e.Arguments))
{
throw new Exception("Failed to create initial page");
}
}
}
// Ensure the current window is active.
Window.Current.Activate();
这允许触发OnNavigatedTo
方法,因此我可以管理从辅助磁贴启动应用的情况。
(我不知道粘贴的代码是否有效,因为我必须在粘贴之前更改它,但这是个想法)