使用PageRenderer时遇到了一些麻烦。
MainPage.xml
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="abc.CustomView">
<ContentPage.Content>
<StackLayout>
<Button Text="scann" Clicked="BtnScannClicked"></Button>
</StackLayout>
</ContentPage.Content>
MainPage.cs
async void BtnScannClicked(object sender, EventArgs e)
{
await Navigation.PushAsync(new CustomView());
}
CustomView.Xaml
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="abc.CustomView">
<ContentPage.Content>
</ContentPage.Content>
</ContentPage>
CustomView.cs
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class CustomView : ContentPage
{
public CustomView ()
{
InitializeComponent ();
}
}
DemoPage.cs(这是我的CustomRenderer)
[assembly: ExportRenderer(typeof(CustomView), typeof(DemoPage))]
namespace abc.UWP
{
class DemoPage: PageRenderer
{
Page page;
Application app;
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Page> e)
{
base.OnElementChanged(e);
if (e.OldElement != null || Element == null)
{
return;
}
try
{
app = Application.Current;
SetupUserInterface();
this.Children.Add(page);
}
catch (Exception ex)
{
Debug.WriteLine(@" ERROR: ", ex.Message);
}
}
void SetupUserInterface()
{
var stackPanel = new StackPanel();
page = new Page();
page.Content = stackPanel;
}
}
}
总有一个 抛出异常:&#39; System.InvalidOperationException&#39;在Xamarin.Forms.Platform.UAP.dll中 构建期间出错。
但我想这对PageRenderer来说并不是一个问题。似乎在ClickEvent期间出现。
答案 0 :(得分:0)
总是抛出异常:构建期间Xamarin.Forms.Platform.UAP.dll错误中出现“System.InvalidOperationException”。
问题是您尚未将MainPage
添加到NavigationPage
。
Windows上不支持全局支持PushAsync
方法。您可以将以下代码添加到app.xaml.cs文件中以解决问题。
public App()
{
InitializeComponent();
var RootNav = new NavigationPage(new MainPage());
MainPage = RootNav;
}
PushModalAsync
- 将页面推送到模态上下文中。这将在应用程序中创建一个新的,独立的导航上下文。创建的模态可以通过硬件后退按钮解除;似乎无法阻止此功能。
因此PushModalAsync
方法不依赖于NavigationPage
,它将适用于您当前的方案。
导航到DemoPage.cs后,我的应用程序总是崩溃(退出代码为-1)。实施应该没问题?
我发现您没有在PageRenderer中实现ArrangeOverride
方法。而且你不会看到页面的内容。
protected override Size ArrangeOverride(Size finalSize)
{
page.Arrange(new Windows.Foundation.Rect(0, 0, finalSize.Width, finalSize.Height));
return finalSize;
}