我正在尝试导航到Xamarin Forms NavigationPage。但是我想在框架第一次加载一些" native"之后尝试这样做。 UWP页面。
this.rootFrame.Navigate(page.GetType(), param);
此代码会生成AccessViolationException
。页面对象是一个Xamarin.Forms.Page,但我也尝试使用NavigationPage(页面)包装器。
我意识到正常的XF导航是使用Navigation.PushAsync等完成的,但我还处于尚未初始化XF应用程序和导航基础架构的位置。
这就是我创建初始NavigationPage的方法
XFormsApp.MainPage = new NavigationPage(contentPage);
var converter = Mvx.Resolve<IMvxNavigationSerializer>();
var requestText = converter.Serializer.SerializeObject(request);
_rootFrame.Navigate(mainPage.GetType(), requestText);
我正在尝试创建一个以Native Pages开头的混合UWP应用程序,然后启动一些XF页面。官方Xamarin Forms samples有一个适用于iOS和Android的示例
答案 0 :(得分:0)
我正在尝试导航到Xamarin Forms NavigationPage。但是我想在框架第一次加载一些&#34; native&#34;之后尝试这样做。 UWP页面。
this.rootFrame.Navigate(page.GetType(), param);
此代码导致AccessViolationException。页面对象是一个Xamarin.Forms.Page,但我也尝试使用NavigationPage(页面)包装器。
rootFrame.Navigate
方法中第一个参数的类型为forms:WindowsPage
。但是在您的代码中,您使用ContentPage
作为第一个参数在Xamarin.Forms
名称空间下,它不是WindowsPage。所以它会抛出异常。
您无法导航到本机客户端项目中的Xamarin表单页面。因为在Xamarin.Forms和UWP中使用的页面不同。该页面在uwp中继承Windows.UI.Xaml.Controls.Page
,并且是继承的TemplatedPage
。
我正在尝试创建一个以Native Pages开头的混合UWP应用程序,然后启动一些XF页面。官方Xamarin Forms示例有一个适用于iOS和Android的示例。
根据您的要求,您可以使用DependencyService
来实现从ContentPage
到WindowsPage
的回复。有关更多详细信息,请参阅以下代码。
<强> MainPage.xaml.cs中强>
public sealed partial class MainPage
{
public MainPage()
{
this.InitializeComponent();
}
private void MyBtn_Click(object sender, RoutedEventArgs e)
{
LoadApplication(new App65.App());
}
}
<强> MainPage.xaml中(便携式)强>
<StackLayout>
<Label Text="Welcome to Xamarin Forms!"
VerticalOptions="Center"
HorizontalOptions="Center" />
<Button Text="GoBack" Clicked="Button_Clicked"/>
</StackLayout>
<强> GoBackImplementation.cs 强>
[assembly: Xamarin.Forms.Dependency(typeof(GoBackImplementation))]
namespace App65.UWP
{
public class GoBackImplementation : IGoBack
{
public void GoBack()
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame != null)
{
rootFrame = new Frame();
rootFrame.NavigationFailed += RootFrame_NavigationFailed;
Window.Current.Content = rootFrame;
}
if (rootFrame.Content == null)
{
rootFrame.Navigate(typeof(MainPage));
}
}
private void RootFrame_NavigationFailed(object sender, Windows.UI.Xaml.Navigation.NavigationFailedEventArgs e)
{
throw new NotImplementedException();
}
}
}
我已将code sample上传到git hub。请检查。