gpt4 book ai didi

c# - Xamarin.Forms Shell 在视觉层次结构之外导航

转载 作者:行者123 更新时间:2023-11-29 18:29:56 25 4
gpt4 key购买 nike

我在如何实现导航到未在 Shell 视觉层次结构(在我的 Shell xaml 中定义)中表示的页面时遇到问题。

根据我对 Shell 导航的了解 in the docs , 我可以通过两种方式导航到这样的页面:

  1. 使用导航属性:
    Navigation.PushAsync(new TargetPage());
  2. 注册路由并使用 Shell 的 URI 导航:
    Routing.RegisterRoute("targetPageRoute", typeof(TargetPage));
    Shell.Current.GoToAsync("targetPageRoute");

这两种方法都遇到了同样的问题:一旦您使用任一方法导航到视觉层次结构之外的页面,Shell 的 flyoutItems 之间的正常导航(使用弹出菜单)将使应用程序崩溃并出现错误:

System.Collections.Generic.KeyNotFoundException: The given key 'MyProject.TargetPage' was not present in the dictionary.

如何重现:

  1. 将两个项目添加到 Shell 的视觉层次结构中:

    <FlyoutItem Title="page 1">
    <Tab>
    <ShellContent>
    <local:Page1 />
    </ShellContent>
    </Tab>
    </FlyoutItem>

    <FlyoutItem Title="page 2">
    <Tab>
    <ShellContent>
    <local:Page2 />
    </ShellContent>
    </Tab>
    </FlyoutItem>
  2. 使用第 1 页上的按钮导航到第 3 页(上面未定义的页面),使用本文顶部描述的两种导航方式之一:
    private void Button_Clicked(object sender, EventArgs e) {
    Navigation.PushAsync(new Page3());
    }
  3. 使用弹出菜单导航至第 2 页
  4. 使用弹出菜单导航至第 1 页 - 应用现在应该会崩溃。

我已经在我的主要项目和一个小型测试项目中对此进行了广泛的测试,但似乎找不到解决方案。任何帮助将不胜感激。

最佳答案

这是来自 xamarin forms 的 github 的相同问题:https://github.com/xamarin/Xamarin.Forms/issues/6738另外,如果你向下滚动,你会看到 pull request,这实际上解决了问题(已经帮助我们公司的应用程序)。您必须实现一个自定义渲染器,它将继承自 ShellItemRenderer,并覆盖现有的 HandleFragmentUpdate(因为事实上,它使用原始 ShellItemRendererBase 中的私有(private)字段,您也必须在此处对它们进行 rebase (不是覆盖,只需从当前的 xamarin android ShellItemRendererBase.cs 文件中复制它们))。但是,正如官方文档所建议的那样,您不应只将此渲染器分配给 ShellItem 派生,相反,您必须创建自定义 ShellRenderer 并覆盖它的 CreateShellItemRenderer 方法(因此它将创建您的固定 shell 项目渲染器而不是默认渲染器).您只需将此呈现器应用到 xamarin 表单中的自定义 shell 控件。

当然,您现在所做的一切都是暂时的,直到 xamarin 推送包含此修复程序的新更新...

关于c# - Xamarin.Forms Shell 在视觉层次结构之外导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56823655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com