我正在将Shell Xamarin应用程序转换为Shell .Net Maui。在我的Xamarin项目中,我的一个详细页面(从MainPage调用)是一个Xmal ContentPage,所有(100%)内容都内置在代码后面。我有一个在OnAppearing()重写方法中调用的BuildForm()方法,该方法构建窗体,并在其结束时将所有控件放入Stacklayout中,并将内容设置为该stacklayout。
StackLayout stackLayout = new StackLayout
{
Orientation = StackOrientation.Vertical,
Children = { connectionView, scrollView, slbuttons, slbuttons1, btnShareAuthority },
Padding = new Thickness(0, 0, 0, 20),
};
Content = stackLayout;
字符串
此详细信息页面有一个共享子页面,用于列出相关消息。任何一个详细信息页面都可以调用此消息页面,以显示与该详细信息相关的消息。返回导航时,使用此消息页面中的应用程序返回按钮,将调用OnAppearing,然后调用BuildForm()方法。页面将重新生成,并且页面显示正常。现在问题来了。在我的Maui应用程序中,我试图做同样的事情。从MainPage导航到详细信息页面都可以正常工作。然而,当从消息页面(设备后退按钮)导航回来时,应用程序似乎只死在Content = stackLayout;
行上。(作为一个边注stacklayout在毛伊岛应用程序是真正的网格作为毛伊岛需要滚动视图是在一个网格。)我没有得到任何错误消息或未处理的异常,它只是停止和应用程序留在消息页面上。然后,我可以再次点击后退按钮,它将导航到详细信息页面,但这一次它将是一个空白页。我想出了一个解决办法,那就是确定页面内容是否为空。所以在我的OnAppearing()方法中
if(Content == null)
{
BuildForm();
}
型
这将在从Mainpage初始加载和从Messages页面导航回来时调用。在BuildForm()方法中,它只在表单的初始加载时调用,我也测试了它:
if(Content == null)
Content = stacklayout;
型
因此,页面生命周期中的内容(至少在我的情况下)只能设置一次。我甚至尝试将Content设置为null,然后将其设置为新构建的网格,但这也不起作用。幸运的是,在整个导航过程中,详细信息页面数据是静态的。所以最大的问题是:这是故意的吗我搜索了Maui文档,没有发现任何有用的信息。为什么它在Xamarin中有效,而在Maui中无效?提前感谢您的输入。
1条答案
按热度按时间3ks5zfa01#
事实证明,Xamarin和Maui在这方面存在差异。@ToolmakeSteve询问了关于
Children
的问题,这导致我确保所有的孩子都在OnAppearing方法中示例化。自定义控件connectionView则不是。在OnAppearing中重新示例化后,所有工作都按预期进行。OnAppearing现在看起来像这样:字符串