У меня проблема с тем, как реализовать навигацию по страницам, которые не представлены в визуальной иерархии оболочки (определено в моем Shell xaml).
Из того, что я читал о навигации Shell вдокументы , я могу перейти к такой странице двумя способами:
- Используя свойство Navigation:
Navigation.PushAsync(new TargetPage());
- Регистрация маршрута и использование URI-навигации Shell:
Routing.RegisterRoute("targetPageRoute", typeof(TargetPage));
Shell.Current.GoToAsync("targetPageRoute");
Оба метода сталкиваются с одной и той же проблемой: Как только вы используете любой метод для перехода на страницу за пределами визуальной иерархии, обычная навигация между элементами оболочки flyoutItems (с использованием всплывающего меню)произойдет сбой приложения с ошибкой:
System.Collections.Generic.KeyNotFoundException: The given key 'MyProject.TargetPage' was not present in the dictionary.
Как воспроизвести:
Добавить два элемента в визуальную иерархию оболочки:
<FlyoutItem Title="page 1">
<Tab>
<ShellContent>
<local:Page1 />
</ShellContent>
</Tab>
</FlyoutItem>
<FlyoutItem Title="page 2">
<Tab>
<ShellContent>
<local:Page2 />
</ShellContent>
</Tab>
</FlyoutItem>
- Используйте кнопку на странице Page1 для перехода на страницу 3 (страница, не определенная выше), используя один из двух способов навигации, описанных в верхней части этого сообщения:
private void Button_Clicked(object sender, EventArgs e) {
Navigation.PushAsync(new Page3());
}
- Использование всплывающей подсказкименю для навигации к Page2
- Используйте всплывающее меню для перехода на страницу Page 1 - приложение должно завершиться сбоем.
Я проверил это в своем основном проекте и в небольшом тестовом проекте и не могу, кажется,найти решение.Любая помощь будет принята с благодарностью.