如何在UWP中使用pagerenderer扩展所有内容页面?

时间:2019-02-13 19:04:20

标签: xamarin.forms uwp custom-renderer

我想用UWP中的本机视图扩展xamarin.forms应用程序中的所有内容页面。我基本上可以转到每个页面并嵌入本机视图,但是我不希望这样。我想知道是否有一种使用pagerenderer的方法。我试过像下面这样。

我的想法是获取当前页面渲染并使用本机视图和stacklayout扩展内容,并通过此更改再次定义app.content。总的来说,它可以工作。如果运行下面的小型测试项目,则可以看到为每个页面显示了本机UWP FontIcons,但是存在一个问题,如果我在附加项目的MasterDetail中浏览同一页面两次,该页面将变为空白。为什么会这样呢? 下面的方法最适合我的情况吗?我愿意寻求替代解决方案。

[assembly: ExportRenderer(typeof(ContentPage), typeof(App3.UWP.ContentPageRenderer))]
namespace App3.UWP
{

    public class ContentPageRenderer : PageRenderer
    {

        bool isDisposing = false;
        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Page> e)
        {
            base.OnElementChanged(e);

            if (isDisposing)
                return;

            if (e.OldElement != null || Element == null)
            {
                return;
            }


            ContentPage page = ((ContentPage)Element);
            if (page.Content == null)
                return;


            var XboxControls = new MyUserControl1();
            StackLayout stackLayout = new StackLayout() { Orientation = StackOrientation.Vertical };
            stackLayout.Children.Add(page.Content);
            stackLayout.Children.Add(XboxControls.ToView());

            page.Content = stackLayout;

        }

        protected override Windows.Foundation.Size ArrangeOverride(Windows.Foundation.Size finalSize)
        {
            return base.ArrangeOverride(finalSize);
        }

        protected override void Dispose(bool disposing)
        {
            isDisposing = disposing;

            base.Dispose(disposing);
        }

    }

Test Project

0 个答案:

没有答案