Shell 应用程序中 MAUI 选项卡的 OnClicked 事件

问题描述 投票:0回答:2

我有一个 MAUI Shell 应用程序,正在使用 TabBar 进行开发。我创建了一个标题,它将显示在多个选项卡上并将用户引导至通知页面。

如果用户单击标题链接,它会正常路由到通知页面。问题是,如果用户单击当前活动的选项卡返回到没有任何反应。我正在尝试捕获 OnClick 事件或选项卡中的某些内容以返回根目录或清除通知页面。

我发现有些人试图在 Xamarin 中使用自定义渲染器解决此问题,但我想知道是否有人在 MAUI 中遇到或解决了此问题。

为了澄清,我遇到的问题是在选项卡上,用户单击链接会路由到新页面,但再次单击该活动选项卡不会返回到该选项卡。

我找不到事件触发器来添加一些逻辑以强制导航回选项卡或页面刷新。

AppShell.xaml.cs

public AppShell()
{
    InitializeComponent();

    Routing.RegisterRoute("Notifications", typeof(Notifications));
    Routing.RegisterRoute("home", typeof(MainPage));
}

AppShell.Xaml:

<TabBar>
    <Tab Title="{x:Static resources:Lang.Home}" Icon="{StaticResource HomeTab}" >
        <ShellContent Route="main" ContentTemplate="{DataTemplate local:MainPage}" />
    </Tab>

    <Tab Title="{x:Static resources:Lang.Shop}" Icon="shop.png" CurrentItem="{x:Reference partSearchPage}">
        <ShellContent Title="{x:Static resources:Lang.SearchInventory}" x:Name="inventorySearchPage" Route="inventorysearch"  ContentTemplate="{DataTemplate inv:InventorySearch}" />
    </Tab>

    <Tab Title="{x:Static resources:Lang.Cart}" Icon="{StaticResource CartTab}">
        <ShellContent Route="cart" ContentTemplate="{DataTemplate cart:CartPage}" />
    </Tab>
</TabBar>

HeaderBar.xaml.cs

private async void NotificationsClicked(object sender, EventArgs args)
{
    await Shell.Current.GoToAsync("Notifications");
}
c# xamarin mobile maui .net-maui.shell
2个回答
0
投票

我不久前就涉足过这个领域。看来这只是安卓的情况。因为在我的 IOS 设备上,一切都按预期运行。

您可以循环:

Shell.Current.Navigation.NavigationStack

删除每一页,从最后一页开始并跳过第一页。

您可以检查这个答案:https://stackoverflow.com/a/73924870/6643940

我并不完全那样做,但这是一个很好的起点。


0
投票

受保护的覆盖 void OnNavigating(ShellNavigatingEventArgs args) { base.OnNavigating(args);

if (args.Source == ShellNavigationSource.ShellSectionChanged)
{
    var navigation = Shell.Current.Navigation;
    var pages = navigation.NavigationStack;
    for (var i = pages.Count - 1; i >= 1; i--)
    {
        navigation.RemovePage(pages[i]);
    }
}

}

这将按预期工作

© www.soinside.com 2019 - 2024. All rights reserved.