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

Posted

技术标签:

【中文标题】在 Forms UWP 中,自定义标题视图中的内容视图的后退导航无法与自定义渲染器一起正常工作【英文标题】:In Forms UWP, back navigation with content view in custom title view not working correct with custom renderer 【发布时间】:2021-04-05 18:22:25 【问题描述】:

说明

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

复制步骤

    运行附加的示例。 导航到子页面并返回。 内容视图被隐藏,页面未正确导航回来。 在自定义渲染器的 on element changed 方法中引发异常。

预期行为

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

实际行为

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

截图

实际输出

预期输出

解决方法

请检查以下示例。 CustomControl.zip

谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:

元素已经是另一个元素的子元素"

问题是你的CustomView已经被前一个view引用了,当你导航回来的时候,导航新建了一个想要使用前一个CustomView的ContentPage,但是前一个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);

【讨论】:

感谢@nico-zhu-msft,但导航回主页时自定义视图仍然消失。 请检查上述案例更新,并在 OnAppearing 方法中设置TitleViewProperty 替换构造方法。

以上是关于在 Forms UWP 中,自定义标题视图中的内容视图的后退导航无法与自定义渲染器一起正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Forms - 防止键盘在 UWP、Android、iOS 中的条目焦点上显示

将 UWP 标头模板中的图标与 xamarin.forms 一起使用

Xamarin.Forms UWP - 具有分页支持的打印 Web 视图

Xamarin 中的 FontAwesome 形成 UWP

text UWP中的自定义视图:ControlTemplate

如何在内容页面中添加按钮以使用自定义渲染器 - 视图捕获图像