Xamarin formx 5.0 上的 FlyoutPage
FlyoutPage on Xamarin formx 5.0
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 版,并像这样更改它 (from this link):
<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");
当我尝试 运行 应用程序时,我遇到了这个异常:
在使用 FlyoutPage
之前必须设置 Flyout 和 Detail
我应该在我的代码中更改什么才能使其正常工作(它应该显示在 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 forms 5
中已过时
Prism 8 不支持 FlyoutPage。您可以阅读更多相关信息 here and here。
AS 错误显示 Flyout and Detail must be set before using a FlyoutPage
.
尝试在 FlyoutPage xaml 中也设置 FlyoutPage.Detail
。
<FlyoutPage.Flyout>
<NavigationPage Title="Title" IconImageSource="hamburger.png">
<x:Arguments>
<ContentPage Title="Menu"
BackgroundColor="White"
NavigationPage.HasNavigationBar="False">
...
</ContentPage>
</x:Arguments>
</NavigationPage>
</FlyoutPage.Flyout>
<FlyoutPage.Detail>
<NavigationPage>
<x:Arguments>
<pages:FlyoutPage1Detail />
</x:Arguments>
</NavigationPage>
</FlyoutPage.Detail>
实际上 Prism 8 不支持 FlyoutPage,所以当我回到:
<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>
它开始工作,但我有警告,因为 MasterDetailPage 已过时但工作 :) 我需要等待 Prism 8.1 并将 MasterDetailPage 迁移到 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 版,并像这样更改它 (from this link):
<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");
当我尝试 运行 应用程序时,我遇到了这个异常: 在使用 FlyoutPage
之前必须设置 Flyout 和 Detail我应该在我的代码中更改什么才能使其正常工作(它应该显示在 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 forms 5
中已过时Prism 8 不支持 FlyoutPage。您可以阅读更多相关信息 here and here。
AS 错误显示 Flyout and Detail must be set before using a FlyoutPage
.
尝试在 FlyoutPage xaml 中也设置 FlyoutPage.Detail
。
<FlyoutPage.Flyout>
<NavigationPage Title="Title" IconImageSource="hamburger.png">
<x:Arguments>
<ContentPage Title="Menu"
BackgroundColor="White"
NavigationPage.HasNavigationBar="False">
...
</ContentPage>
</x:Arguments>
</NavigationPage>
</FlyoutPage.Flyout>
<FlyoutPage.Detail>
<NavigationPage>
<x:Arguments>
<pages:FlyoutPage1Detail />
</x:Arguments>
</NavigationPage>
</FlyoutPage.Detail>
实际上 Prism 8 不支持 FlyoutPage,所以当我回到:
<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>
它开始工作,但我有警告,因为 MasterDetailPage 已过时但工作 :) 我需要等待 Prism 8.1 并将 MasterDetailPage 迁移到 FlyoutPage