AccessViolationException, создаваемый при переходе на страницу форм Xamarin
Я пытаюсь перейти на страницу навигации Xamarin Forms. Однако я пытаюсь сделать это после того, как кадр был впервые загружен некоторыми "родными" страницами UWP.
this.rootFrame.Navigate(page.GetType(), param);
Этот код приводит к AccessViolationException
, Объект страницы является Xamarin.Forms.Page, но я также пробовал его с помощью оболочки NavigationPage(page).
Я понимаю, что нормальная навигация 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);
Я пытаюсь создать гибридное приложение UWP, которое начинается с Native Pages, а затем запускает некоторые страницы XF. Официальные образцы Xamarin Forms имеют пример этого для iOS и Android
1 ответ
Я пытаюсь перейти на страницу навигации Xamarin Forms. Однако я пытаюсь сделать это после того, как кадр был впервые загружен некоторыми "родными" страницами UWP.
this.rootFrame.Navigate(page.GetType(), param);
Этот код приводит к AccessViolationException. Объект страницы является Xamarin.Forms.Page, но я также пробовал его с помощью оболочки NavigationPage (page).
Тип первого параметра в rootFrame.Navigate
метод forms:WindowsPage
, Но в вашем коде вы использовали ContentPage
где под Xamarin.Forms
пространство имен как первый параметр, это не WindowsPage. Так что это бросило бы исключение.
Вы не можете перейти на страницу форм Xamarin в проекте собственного клиента. Поскольку используемая страница отличается в Xamarin.Forms и UWP. Страница наследуется Windows.UI.Xaml.Controls.Page
в uwp, и это наследуется TemplatedPage
,
Я пытаюсь создать гибридное приложение UWP, которое начинается с Native Pages, а затем запускает некоторые страницы 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 (Portable)
<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();
}
}
}
У меня есть пример кода загрузки в git hub. Пожалуйста, проверьте.