首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Xamarin Forms Shell登录时导航到登录页时销毁选项卡页?

如何在Xamarin Forms Shell登录时导航到登录页时销毁选项卡页?
EN

Stack Overflow用户
提问于 2022-03-09 09:09:31
回答 1查看 350关注 0票数 0

在Xamarin Forms Shell中,AppShell.xaml的内容如下:

代码语言:javascript
复制
<Shell ...>
    <ShellContent Route="login" ContentTemplate="{DataTemplate local:LoginPage}" />

    <TabBar Route="home">
        <ShellContent Route="Tab1" ContentTemplate="{DataTemplate home:Tab1Page}" Title="tab1" />
        <ShellContent Route="Tab2" ContentTemplate="{DataTemplate home:Tab2Page}" Title="Tab2" />
    </TabBar>
</Shell>

首先显示登录页。

user1登录后,将显示带有user1内容的选项卡。登录页面没有被销毁(为什么?)。

注销后,再次显示登录页。该页面没有重新创建,因为它在开始时没有被销毁。此外,标签没有被销毁(为什么?)

然后user2登录:标签将再次显示,但不会重新创建。它们仍然显示user1 1的内容。

登录后,我将使用以下代码强制从导航堆栈中删除登录页:

代码语言:javascript
复制
foreach (var page in Shell.Current.Navigation.NavigationStack.Reverse().Where(p => p != null))
   Shell.Current.Navigation.RemovePage(page);
await Shell.Current.GoToAsync($"//home/Tab1");

我在注销后使用Shell.Current.GoToAsync("//login");

这个问题似乎是由AppShell.xaml中的静态声明引起的,该声明缓存所有创建的页面。

实现这种常见场景的正确方法是什么?(我不使用任何飞碟)

EN

回答 1

Stack Overflow用户

发布于 2022-03-10 06:16:43

关于这一点,我认为您可以参考文章使用Xamarin窗体Shell创建登录流

壳牌的结构如下:

代码语言:javascript
复制
 <Shell>

    <!-- Loading/Start Page -->
    <ShellItem Route="loading">
        <ShellContent ContentTemplate="{DataTemplate local:LoadingPage}" />
    </ShellItem>

    <!-- Login and Registration Page -->
    <ShellContent Route="login"
                  ContentTemplate="{DataTemplate local:LoginPage}">
    </ShellContent>

    <!-- Main Page -->
    <FlyoutItem Route="main"
                FlyoutDisplayOptions="AsMultipleItems" IsTabStop="False">
        <ShellContent Route="home"
                      IsTabStop="False"
                      ContentTemplate="{DataTemplate local:MainPage}"
                      Title="Home" />
    </FlyoutItem>
    <MenuItem Text="Logout"
              Command="{Binding ExecuteLogout}" />
</Shell>

对于登录页面,我们将其设置如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             ...
             Shell.PresentationMode="ModalAnimated"
             ...>
    ...
</ContentPage>

而且,每当您以模式导航时,在目标页面后面的代码中重写后退按钮导航总是一个好主意,如下所示:

代码语言:javascript
复制
    protected override bool OnBackButtonPressed()
    {
        return true;
    }

在上面的文章中包含了一个示例,您可以查看它这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71406814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档