Xamarin表示UWP PageRenderer

时间:2017-10-17 05:50:28

标签: forms xamarin xamarin.forms uwp

使用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期间出现。

1 个答案:

答案 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;        
}