Xamarin Forms 中没有后退按钮的选项卡式页面
Tabbed Page without Back button in Xamarin Forms
在我的 Xamarin Forms 5 应用程序中,我在 AppShell
的页脚中有一个设置图标,单击后会打开一个 TabbedPage
。这部分工作正常,但当页面打开时,我看到顶部的后退按钮。我希望此 TabbedPage
的外观和行为与 FlyoutItem
s 部分中的任何其他页面一样。
这是我要创建的效果:
我可以在 ShellFooter
中使用以下内容创建它:
<Grid xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Ingrid.Connect.Views.FlyoutFooter"
RowDefinitions="120"
ColumnDefinitions="150, 150">
<Image
Grid.Row="0"
Grid.Column="0"
HorizontalOptions="StartAndExpand"
Margin="50,0,0,0">
<Image.Source>
<FontImageSource
FontFamily="MISHRP"
Glyph="{StaticResource SettingsIcon}"
Color="White"/>
</Image.Source>
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="Settings_Tapped" />
</Image.GestureRecognizers>
</Image>
<Image
Grid.Row="0"
Grid.Column="1"
HorizontalOptions="EndAndExpand"
Margin="0,0,30,0">
<Image.Source>
<FontImageSource
FontFamily="MISHRP"
Glyph="{StaticResource PowerIcon}"
Color="White"/>
</Image.Source>
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="LogOut_Tapped" />
</Image.GestureRecognizers>
</Image>
</Grid>
Settings_Tapped
方法如下所示:
async void Settings_Tapped(object sender, EventArgs e)
{
await Shell.Current.GoToAsync(nameof(SettingsPage));
}
而 SettingsPage
只是一个 TabbedPage
。此设置有效,但正如我所说,我确实在页面顶部获得了“后退”按钮。我希望“设置”页面的外观和行为与应用程序中的任何其他页面一样。
顺便说一句,我尝试添加 NavigationPage.SetHasBackButton(SettingsPage, false);
但这给了我一个错误。上面写着:
'SettingsPage' is a type, which is not valid in the given context
知道如何使 SettingsPage
的外观和行为与其他页面一样吗?
其他页面都是包裹在ShellContent中的项目,如果你使用GoToAsync,新页面和主页面将不会显示在同一层stack.So你可以包裹settingspage并更改currentitem时点击像这样的按钮:
xmal:
<FlyoutItem Title="." IsVisible="False" x:Name="mysettings">
<ShellContent Route="ItemsPage" ContentTemplate="{DataTemplate local:SettingsPage}" />
</FlyoutItem>
点击按钮:
Shell.Current.CurrentItem=mysettings;
在我的 Xamarin Forms 5 应用程序中,我在 AppShell
的页脚中有一个设置图标,单击后会打开一个 TabbedPage
。这部分工作正常,但当页面打开时,我看到顶部的后退按钮。我希望此 TabbedPage
的外观和行为与 FlyoutItem
s 部分中的任何其他页面一样。
这是我要创建的效果:
我可以在 ShellFooter
中使用以下内容创建它:
<Grid xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Ingrid.Connect.Views.FlyoutFooter"
RowDefinitions="120"
ColumnDefinitions="150, 150">
<Image
Grid.Row="0"
Grid.Column="0"
HorizontalOptions="StartAndExpand"
Margin="50,0,0,0">
<Image.Source>
<FontImageSource
FontFamily="MISHRP"
Glyph="{StaticResource SettingsIcon}"
Color="White"/>
</Image.Source>
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="Settings_Tapped" />
</Image.GestureRecognizers>
</Image>
<Image
Grid.Row="0"
Grid.Column="1"
HorizontalOptions="EndAndExpand"
Margin="0,0,30,0">
<Image.Source>
<FontImageSource
FontFamily="MISHRP"
Glyph="{StaticResource PowerIcon}"
Color="White"/>
</Image.Source>
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="LogOut_Tapped" />
</Image.GestureRecognizers>
</Image>
</Grid>
Settings_Tapped
方法如下所示:
async void Settings_Tapped(object sender, EventArgs e)
{
await Shell.Current.GoToAsync(nameof(SettingsPage));
}
而 SettingsPage
只是一个 TabbedPage
。此设置有效,但正如我所说,我确实在页面顶部获得了“后退”按钮。我希望“设置”页面的外观和行为与应用程序中的任何其他页面一样。
顺便说一句,我尝试添加 NavigationPage.SetHasBackButton(SettingsPage, false);
但这给了我一个错误。上面写着:
'SettingsPage' is a type, which is not valid in the given context
知道如何使 SettingsPage
的外观和行为与其他页面一样吗?
其他页面都是包裹在ShellContent中的项目,如果你使用GoToAsync,新页面和主页面将不会显示在同一层stack.So你可以包裹settingspage并更改currentitem时点击像这样的按钮:
xmal:
<FlyoutItem Title="." IsVisible="False" x:Name="mysettings"> <ShellContent Route="ItemsPage" ContentTemplate="{DataTemplate local:SettingsPage}" /> </FlyoutItem>
点击按钮:
Shell.Current.CurrentItem=mysettings;