.NET MAUI迁移FlyoutPage汉堡图标不显示问题求助
.NET MAUI迁移中FlyoutPage汉堡图标不显示问题求助
我正在将一个Xamarin项目迁移至.NET MAUI,当前遇到FlyoutPage的汉堡图标不显示的问题:虽然可以从左侧拖拽呼出菜单且功能正常,但初始化导航服务时图标会消失;若注释导航服务初始化代码,图标会显示,但点击菜单项会抛出异常。项目基于这套导航服务构建(涉及路由、ViewModel初始化等),担心绕过它需要大量重构,请问是否有开发者遇到相同问题并能提供可行的解决方案?
相关代码片段
App类代码
public partial class App : Application { public App() { InitializeComponent(); Resources["DefaultStringResources"] = new Resx.AppResources(); DependencyService.Register<SoapServices>(); DependencyService.Register<SQLiteHelper>(); DependencyService.Register<BackgroundServiceImplementation>(); DependencyService.Register<PdfService>(); InitApp(); InitLoggerService(); VersionTracking.Track(); MainPage = new RootMasterDetailView(); //DependencyService.Get<ISQLiteHelper>().ImportDatabase("KoreDatabase.db3"); } //protected override Window CreateWindow(IActivationState activationState) //{ // MainPage = new RootMasterDetailView(); // return base.CreateWindow(activationState); //} private void InitLoggerService() { var loggerService = ViewModelLocator.Resolve<ILoggerService>(); loggerService.InitializeAnalytics(); } private void InitApp() { VersionTracking.Track(); Settings.UrlBase = Constants.BaseUrl; ViewModelLocator.RegisterDependencies(); } protected override async void OnStart() { base.OnStart(); //await InitNavigation(); // ********* 注释掉这行,汉堡图标就会显示 } private Task InitNavigation() { var navigationService = ViewModelLocator.Resolve<INavigationService>(); return navigationService.InitializeAsync(); } }
导航服务InitializeAsync方法
public Task InitializeAsync() { if (!Settings.IsLoggedIn) { return NavigateToAsync<LoginViewModel>(); } else { if (Settings.FinishedFirstSync) { return NavigateToAsync<RootMasterDetailViewModel>(); } else { return NavigateToAsync<StatusViewModel>(true); } } }
导航服务NavigateToAsync重载方法
public Task NavigateToAsync<TViewModel>() where TViewModel : ViewModelBase { return InternalNavigateToAsync(typeof(TViewModel), null); } public Task NavigateToAsync<TViewModel>(object parameter) where TViewModel : ViewModelBase { return InternalNavigateToAsync(typeof(TViewModel), parameter); }
导航服务InternalNavigateToAsync方法
private async Task InternalNavigateToAsync(Type viewModelType, object parameter) { //_loggerService.RegisterNavigationEvent(viewModelType, parameter); Page page = CreatePage(viewModelType, parameter); // if (page is LoginView) // { // Application.Current.MainPage = new CustomNavigationView(page); // } // else // { var navigationPage = Application.Current.MainPage as NavigationPage; if (navigationPage != null) { await navigationPage.PushAsync(page); } else { Application.Current.MainPage = new NavigationPage(page); } // } await InitializePage(page, parameter); }
导航服务InitializePage方法
private async Task InitializePage(Page page, object parameter = null) { if ((page.BindingContext as ViewModelBase).Initialized) return; await (page.BindingContext as ViewModelBase).InitializeAsync(parameter); if (page is FlyoutPage) { await InitializePage(((FlyoutPage)page).Flyout, null); await InitializePage(((FlyoutPage)page).Detail, null); } else if (page is TabbedPage) { foreach (var child in (page as TabbedPage).Children) { await InitializePage(child, parameter); } } else if (page is NavigationPage) { await InitializePage((page as NavigationPage).CurrentPage, null); } }
内容的提问来源于Stack Exchange,提问作者Agus
相关产品推荐
相关产品推荐

