我想用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);
}
}