Я попытался адаптировать инструкции по реализации оболочки в Template10 на GitHub. в оболочку во вторичном окне, но это не работает.
Этот код:
await DispatcherWrapper.Current().DispatchAsync(async () =>
{
//The next line gets the exception
var control = await BootStrapper.Current.NavigationService.OpenAsync(
typeof(MySecondaryShell), null, "My Secondary Function");
control.Released += Control_Released;
BootStrapper.Current.NavigationService.Navigate(typeof(MySecondaryPage));
});
получает это исключение:
E VUI 1808 16:12:27.203 D:\SVN_Trunk\Source\Uwp\Gui\UwpMain\ViewModels\MyPrimaryShellViewModel.cs.275.MyFunction System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. в Uwp.Main.UwpMain_XamlTypeInfo.XamlUserType.ActivateInstance() в Windows.UI.Xaml.Controls.Frame.Navigate (тип sourcePageType, параметр объекта, NavigationTransitionInfo infoOverride) в Template10.Services.NavigationService.FrameFacade.Navigate (страница типа, параметр объекта , NavigationTransitionInfo infoOverride) в Template10.Services.NavigationService.NavigationService.d__34.MoveNext() --- Конец трассировки стека из предыдущего места, где было выдано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(задача задачи) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(задача задачи) в Template10.Services.NavigationService.NavigationService.Navigate(страница типа, параметр объекта, NavigationTransitionInfo infoOverride) в Template10.Services.ViewService.ViewService.‹>c__DisplayClass1_0.‹b__0>d .MoveNext() --- Конец трассировки стека из предыдущего места, где было выдано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(задача задачи) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(задача задачи) в Template10.Services.ViewService.ViewService.d__1.MoveNext() --- Конец трассировки стека из предыдущее местоположение, где было выдано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(задача задачи) в System.Runtime.CompilerServices.TaskAwaiter`1.GetResult( ) в Uwp.Main.ViewModels.MyPrimaryShellViewModel.‹>c__DisplayClass63_0.‹b__0>d.MoveNext()
MySecondaryShell построен следующим образом:
public static HamburgerMenu HamburgerMenu => Instance.EmulatorHamburgerMenu;
public MySecondaryShell(INavigationService navigationService)
{
this.InitializeComponent();
HamburgerMenu.NavigationService = navigationService;
}
Когда я открываю главное окно с его оболочкой, я создаю объект оболочки, а затем назначаю ему NavigationService.
Но когда я открываю дополнительное окно, я просто вызываю NavigationService.OpenAsync с типом (MySecondaryShell) в качестве параметра. Проблема в том, что NavigationService неправильно настроен в оболочке? (Из чтения кода Template10 в мой последний вопрос, я не увидел, где установлен NavigationService).
Как мне открыть оболочку в качестве вторичного окна?