xamarin.forms - Xamarin formx 5.0 上的 FlyoutPage
问题描述
Om Xamarin Forms 我们使用此代码创建母版页:
<MasterDetailPage.ToolbarItems>
<ToolbarItem Priority="0" Order="Secondary" Text="{x:DynamicResource MasterPageControls}" Command="{Binding ControlsCommand}" />
<ToolbarItem Priority="1" Order="Secondary" Text="{x:DynamicResource Refresh}" Command="{Binding RefreshCommand}" />
<ToolbarItem Priority="2" Order="Secondary" Text="{x:DynamicResource About}" Command="{Binding AboutCommand}" />
<ToolbarItem Priority="4" Order="Secondary" Text="{x:DynamicResource Logout}" Command="{Binding LogoutCommand}"/>
</MasterDetailPage.ToolbarItems>
<MasterDetailPage.Master>
<NavigationPage Title="Title" IconImageSource="hamburger.png">
<x:Arguments>
<ContentPage Title="Menu"
BackgroundColor="White"
NavigationPage.HasNavigationBar="False">
....
</ContentPage>
</x:Arguments>
</NavigationPage>
</MasterDetailPage.Master>
现在我将我的代码迁移到 5.0 版并像这样更改它(来自此链接):
<FlyoutPage.ToolbarItems>
<ToolbarItem Priority="0" Order="Secondary" Text="{x:DynamicResource MasterPageControls}" />
<ToolbarItem Priority="1" Order="Secondary" Text="{x:DynamicResource Refresh}" />
<ToolbarItem Priority="2" Order="Secondary" Text="{x:DynamicResource About}" />
<ToolbarItem Priority="4" Order="Secondary" Text="{x:DynamicResource Logout}"/>
</FlyoutPage.ToolbarItems>
<FlyoutPage.Flyout>
<NavigationPage Title="Title" IconImageSource="hamburger.png">
<x:Arguments>
<ContentPage Title="Menu"
BackgroundColor="White"
NavigationPage.HasNavigationBar="False">
...
</ContentPage>
</x:Arguments>
</NavigationPage>
</FlyoutPage.Flyout>
登记:
containerRegistry.RegisterForNavigation<NavigationPage>("NavigationPage");
containerRegistry.RegisterForNavigation<PrismMasterDetailPage, PrismMasterDetailPageViewModel>("MasterPage");
containerRegistry.RegisterForNavigation<MainPage, MainPageViewModel>();
和导航:
await NavigationService.NavigateAsync("/MasterPage/NavigationPage/MainPage");
当我尝试运行应用程序时出现此异常: Flyout and Detail must be set before using a FlyoutPage
我应该在我的代码中进行哪些更改才能正常工作(它应该显示在右侧 MasterPage 和屏幕 MainPage 的中心)?
编辑:我通过添加登录页面来更改我的代码。它在 App.xaml.cs 上运行,就像这样:
await NavigationService.NavigateAsync($"/NavigationPage/{nameof(LoginPage)}");
在 LoginPageViewModel 上,我已将命令绑定到我运行方法以导航到 MainPage 的按钮。在 Xamarin.Forms 4.8 中,我们使用该命令:
await NavigationService.NavigateAsync("/MasterPage/NavigationPage/MainPage",
new NavigationParameters {{nameof(LoginPageViewModel), string.Empty}});
但是现在当我使用它时,导航不起作用(没有任何异常或类似的想法):(
当我从名称中删除 /MasterPage 时,我导航到 MainPage 但我没有 MasterPage
编辑 2:我将代码表单使用 FlyoutPage 更改为 MasterDetailPage 并开始工作,但 MasterDetailPage 在 xamarin 表单 5 中已过时
解决方案
Prism 8 不支持 FlyoutPage。您可以在此处和此处阅读有关它的更多信息。
推荐阅读
- terraform - Terraform 0.12 迁移 - 具有默认对象的变量
- excel - VBA 宏在表格末尾插入一行,然后将先前复制的行的值粘贴到新行的特定范围内
- u-boot - 在 C 中执行 bootm 命令
- javascript - VSCode 扩展替换整个文档的文本
- c# - 有什么方法可以以相应的形式显示错误吗?
- javascript - 如何使用javascript从句子中选择单词?
- python - 使用命令的 Django 项目设置问题:django-admin startproject xxxxxx
- r - 如何在保持R中另一列的顺序的同时对列进行排序?
- python - 如何对每列中的所有值求和并将每列除以求和值
- azure-devops - 如果自定义条件评估为 false,则发布管道作业失败