如何隐藏 shell 中某些页面的后退按钮?
How can I hide the back button from certain pages in the shell?
仅在 login
和 notifications
页面我希望用户无法 return 到上一页。在所有其他页面上,该过程可以正常进行。
到目前为止,我只能使用 BackButtonBehavior IsEnabled = "False"
禁用按钮单击操作。
NotificationsPage.xaml 和 LoginPage.xaml
<Shell.BackButtonBehavior>
<BackButtonBehavior IsEnabled="False"/>
</Shell.BackButtonBehavior>
TokenViewModel
await Shell.Current.GoToAsync($"{nameof(NotificacoesPage)}");
App.xaml.cs
await Shell.Current.GoToAsync($"{nameof(NotificacoesPage)}", false);
AppShell.xaml
<TabBar>
<Tab Icon="notificacao_icone.png"
Title="Notificações">
<ShellContent ContentTemplate="{DataTemplate local:NotificacoesPage}" />
</Tab>
<Tab Icon="configuracoes_icone.png"
Title="Configurações">
<ShellContent ContentTemplate="{DataTemplate local:ConfiguracoesPage}" />
</Tab>
</TabBar>
AppShell.xaml.cs
Routing.RegisterRoute(nameof(LoginPage), typeof(LoginPage));
Routing.RegisterRoute(nameof(TokenPage), typeof(TokenPage));
Routing.RegisterRoute(nameof(NotificacoesPage), typeof(NotificacoesPage));
Routing.RegisterRoute(nameof(NotificacaoDetalhePage), typeof(NotificacaoDetalhePage));
Routing.RegisterRoute(nameof(ConfiguracoesPage), typeof(ConfiguracoesPage));
这里有一个 workaround.You 可以隐藏整个导航栏,然后用 StackLayout 自定义一个 NavigationBar 来代替它。
类似于:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="ShellNewDemo.Views.ItemDetailPage"
Shell.NavBarIsVisible="False" //hide the navigationbar
>
<ContentPage.Content>
<StackLayout Orientation="Vertical">
<StackLayout Orientation="Horizontal">
//define your custom navigationbar
</StackLayout>
<StackLayout Orientation="Vertical">
//content
</StackLayout>
</StackLayout>
</ContentPage.Content>
</ContentPage>
仅在 login
和 notifications
页面我希望用户无法 return 到上一页。在所有其他页面上,该过程可以正常进行。
到目前为止,我只能使用 BackButtonBehavior IsEnabled = "False"
禁用按钮单击操作。
NotificationsPage.xaml 和 LoginPage.xaml
<Shell.BackButtonBehavior>
<BackButtonBehavior IsEnabled="False"/>
</Shell.BackButtonBehavior>
TokenViewModel
await Shell.Current.GoToAsync($"{nameof(NotificacoesPage)}");
App.xaml.cs
await Shell.Current.GoToAsync($"{nameof(NotificacoesPage)}", false);
AppShell.xaml
<TabBar>
<Tab Icon="notificacao_icone.png"
Title="Notificações">
<ShellContent ContentTemplate="{DataTemplate local:NotificacoesPage}" />
</Tab>
<Tab Icon="configuracoes_icone.png"
Title="Configurações">
<ShellContent ContentTemplate="{DataTemplate local:ConfiguracoesPage}" />
</Tab>
</TabBar>
AppShell.xaml.cs
Routing.RegisterRoute(nameof(LoginPage), typeof(LoginPage));
Routing.RegisterRoute(nameof(TokenPage), typeof(TokenPage));
Routing.RegisterRoute(nameof(NotificacoesPage), typeof(NotificacoesPage));
Routing.RegisterRoute(nameof(NotificacaoDetalhePage), typeof(NotificacaoDetalhePage));
Routing.RegisterRoute(nameof(ConfiguracoesPage), typeof(ConfiguracoesPage));
这里有一个 workaround.You 可以隐藏整个导航栏,然后用 StackLayout 自定义一个 NavigationBar 来代替它。
类似于:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="ShellNewDemo.Views.ItemDetailPage"
Shell.NavBarIsVisible="False" //hide the navigationbar
>
<ContentPage.Content>
<StackLayout Orientation="Vertical">
<StackLayout Orientation="Horizontal">
//define your custom navigationbar
</StackLayout>
<StackLayout Orientation="Vertical">
//content
</StackLayout>
</StackLayout>
</ContentPage.Content>
</ContentPage>