XAML 如何在.net Maui中更新标签栏

vmdwslir  于 2023-09-28  发布在  .NET
关注(0)|答案(1)|浏览(130)

我的应用程序包含一个全局选项卡栏。其中的选项卡可以更改其顺序,可以删除或添加,也可以在视觉上进行更改。因此我想在运行时更新标签栏。用户不应该被移动到不同的页面,因此导航堆栈在更新时不应该改变。我尝试先清除标签栏的项目,然后添加正确的回它。但是我在使用这种方法时遇到了很多问题,得到了如下异常:
Global routes currently cannot be the only page on the stack, so absolute routing to global routes is not supported. For now, just navigate to: MainPage
我认为问题是我清除了标签,因为在那一刻, shell 是空的。
我怎么能有一个动态的标签栏在.net毛伊岛?
AppShell.xaml:

<Shell
    x:Class="MauiTestApplication.AppShell"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    Shell.FlyoutBehavior="Disabled">

    <TabBar x:Name="MainTabBar"/>

</Shell>

AppShell.xaml.cs:

public void UpdateTabs()
{
   MainTabBar.Items.Clear();
   // Create all tabs
   // Add all tabs to tabbar via: MainTabBar.Items.Add(TAB);
}
9wbgstp7

9wbgstp71#

我做了一个演示,删除并再次添加标签。
你可以试试下面的代码:
AppShell.cs

public void UpdateTabs()
{
    //MainTabBar.Items.Clear();

    //  I add these two lines, then it can add the tab in it
    //MainTabBar = new TabBar();
    //this.Items.Add(MainTabBar);

    MainTabBar.Items.Add(new ShellContent()
    {
        Title = "Home",
        ContentTemplate = new DataTemplate(() => new MainPage()),
        Route = "mainpage",
    });

}

希望有帮助。
创建一个新的TabBar似乎会清空导航堆栈。你可以添加和删除其中的项目,而不是让它为空。
效果:

相关问题