Я хотел бы расширить все страницы содержимого в моем приложении xamarin.forms с собственным представлением в UWP.Я могу в основном перейти на каждую страницу и встроить собственный вид, но я не хочу этого.Я хочу знать, есть ли способ сделать это с помощью Pagerenderer.Я попытался сделать, как показано ниже.
Моя идея состояла в том, чтобы получить рендеринг текущей страницы и расширить содержимое с помощью собственного представления и стекового макета и снова определить app.content с этим изменением.Работает в общем.Если вы запустите небольшой тестовый проект, показанный ниже, вы увидите, что для каждой страницы отображаются родные шрифтовые символы UWP, но есть проблема, если я перехожу одну и ту же страницу 2 раза в 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);
}
}
Тестовый проект