Xamarin.forms 未导航从UWP URI协议方案启动

Xamarin.forms 未导航从UWP URI协议方案启动,xamarin.forms,uwp,url-scheme,uwp-navigation,Xamarin.forms,Uwp,Url Scheme,Uwp Navigation,我已按照发现的说明进行操作;但是,当我使用指定的协议我的协议://(输入到web浏览器中)启动我的应用程序时,该应用程序将启动,但它只是停留在启动屏幕上,就好像导航无法执行任何操作一样: 代码示例: // MyApp.UWP/App.xaml.cs protected override void OnActivated(IActivatedEventArgs args) { if (args.Kind == ActivationKind.Protocol) {

我已按照发现的说明进行操作;但是,当我使用指定的协议
我的协议://
(输入到web浏览器中)启动我的应用程序时,该应用程序将启动,但它只是停留在启动屏幕上,就好像导航无法执行任何操作一样:

代码示例:

// MyApp.UWP/App.xaml.cs
protected override void OnActivated(IActivatedEventArgs args)
  {
      if (args.Kind == ActivationKind.Protocol)
      {
         ProtocolActivatedEventArgs eventArgs = 
             args as ProtocolActivatedEventArgs;

         // TODO: Decide where to navigate, but for now just go to main page

         Frame rootFrame = Window.Current.Content as Frame;
         rootFrame.Navigate(typeof(MainPage), args);
      }
   }
是否有明显的事情表明我做错了?也许有更好的方法来处理导航?或者我忽略了什么

编辑

这尤其难以排除故障,因为我不能在VisualStudio中使用debug运行。要测试它,我实际上必须从未连接到调试器的
my protocol://
启动它


从url/协议启动时,是否有方法调试此问题?

我可以重现您的问题@肯尼茨的建议是正确的。在导航之前,您首先需要进行判断

请参考以下代码示例以供参考

protected override void OnActivated(IActivatedEventArgs args)
{
碱基激活(args);
if(args.Kind==ActivationKind.Protocol)
{
ProtocolActivatedEventArgs事件args=
args作为ProtocolActivatedEventArgs;
//TODO:决定在哪里导航,但现在只需转到主页
Frame rootFrame=Window.Current.Content作为Frame;
if(rootFrame==null)
{
rootFrame=新框架();
}
Window.Current.Content=rootFrame;
rootFrame.Navigate(typeof(MainPage),args);
Window.Current.Activate();
}
}

我可以复制您的问题@肯尼茨的建议是正确的。在导航之前,您首先需要进行判断

请参考以下代码示例以供参考

protected override void OnActivated(IActivatedEventArgs args)
{
碱基激活(args);
if(args.Kind==ActivationKind.Protocol)
{
ProtocolActivatedEventArgs事件args=
args作为ProtocolActivatedEventArgs;
//TODO:决定在哪里导航,但现在只需转到主页
Frame rootFrame=Window.Current.Content作为Frame;
if(rootFrame==null)
{
rootFrame=新框架();
}
Window.Current.Content=rootFrame;
rootFrame.Navigate(typeof(MainPage),args);
Window.Current.Activate();
}
}

Is
Window.Current.Content
null在这种情况下?它对我来说不是null,但这是一个检查的好方法。Is
Window.Current.Content在这种情况下是null?它对我来说不是null,但这是一个检查的好方法。我尝试了这个解决方案。。。这对我不起作用。现在,应用程序只是崩溃,而不是在启动屏幕上停止。我会在更多的工作和报告回来。我上面的代码在我这边工作得很好。如果它对您不起作用,那么代码中可能还有一些其他问题。在这种情况下很容易调试。“右键单击visual studio中的项目-选择属性-选择调试-请参阅开始操作-选择不启动,但在启动时调试我的代码”。然后在本地计算机上开始调试,你的应用程序将不会启动,你在浏览器中键入应用程序的协议以激活你的应用程序。哇,在这种情况下,该选项是一个救命稻草。。。非常感谢您的分享。我错过了
窗口。Current.Activate()行,现在可以工作了,谢谢!我尝试了这个解决方案。。。这对我不起作用。现在,应用程序只是崩溃,而不是在启动屏幕上停止。我会在更多的工作和报告回来。我上面的代码在我这边工作得很好。如果它对您不起作用,那么代码中可能还有一些其他问题。在这种情况下很容易调试。“右键单击visual studio中的项目-选择属性-选择调试-请参阅开始操作-选择不启动,但在启动时调试我的代码”。然后在本地计算机上开始调试,你的应用程序将不会启动,你在浏览器中键入应用程序的协议以激活你的应用程序。哇,在这种情况下,该选项是一个救命稻草。。。非常感谢您的分享。我错过了
窗口。Current.Activate()行,现在可以工作了,谢谢!