在 Forms UWP 中,自定义标题视图中内容视图的后退导航无法与自定义渲染器一起正常工作

In Forms UWP, back navigation with content view in custom title view not working correct with custom renderer

描述

为内容视图使用自定义渲染器时。它抛出“元素已经是另一个元素的 child”,同时使用内容控件将内容视图的内容转换为内容呈现器。

重现步骤

  1. 运行 附件示例。
  2. 导航到子页面并返回。
  3. 内容视图被隐藏,页面无法正确导航回来。
  4. 在自定义呈现器的元素更改方法中抛出异常。

预期行为

页面应该像第二次一样使用内容视图正确导航回来。

实际行为

第一次页面没有正确导航回来,内容视图也消失了。

截图

解决方法

请检查以下示例。 CustomControl.zip

谁能帮我解决这个问题?

Element is already the child of another element"

问题是你的CustomView已经被之前的view引用了,当你导航回来的时候,导航创建了新的ContentPage,想要使用之前的CustomView,但是之前的CustomView还没有被释放。为了解决这个问题,你可以在页面 OnDisappearing.

时将 TitleViewProperty 设置为 null
protected override void OnDisappearing()
{
    base.OnDisappearing();
    SetValue(NavigationPage.TitleViewProperty, null);
}

更新

请在 OnAppearing 方法中设置 TitleViewProperty,如下所示。

protected override void OnAppearing()
{
    base.OnAppearing();
    SetValue(NavigationPage.TitleViewProperty, new NavigationView());
}

protected override void OnDisappearing()
{
    base.OnDisappearing();
    SetValue(NavigationPage.TitleViewProperty, null);
}