Я создал приложение с Windows Template Studio на Visual Studio 2017.
Приложение в основном NavigationDrawer
с разными страницами.
Все было хорошо, пока я не хотел добавить страницу входа.
Итак, я создал XAML
страницы входа и т. Д. Но теперь я хочу, чтобы она отображалась перед страницей NavigationDrawer
при запуске приложения.
Я искал некоторую документацию о App.xaml.cs
, чтобы узнать, что изменить, чтобы сделать это, но из-за использования Windows Template Studio код больше не является ванильным.
Я попробовал несколько вещей, и единственное, что я могу сделать прямо сейчас, - это изменить страницу оболочки NavigationDrawer
на мою Login
страницу.
Это не совсем то, чего я хочу, потому что мое первое намерение состояло в том, чтобы сделать приложение недоступным до тех пор, пока вы не войдете в систему, и поскольку NavigationDrawer
все еще можно использовать, пользователь все еще может делать то, что он хочет.
Мой app.xaml.cs
выглядит так:
using System;
using BasePosteMobilite.Services;
using Windows.ApplicationModel.Activation;
using Windows.UI.Xaml;
namespace BasePosteMobilite
{
public sealed partial class App : Application
{
private Lazy<ActivationService> _activationService;
private ActivationService ActivationService
{
get { return _activationService.Value; }
}
public App()
{
InitializeComponent();
// Deferred execution until used. Check https://msdn.microsoft.com/library/dd642331(v=vs.110).aspx for further info on Lazy<T> class.
_activationService = new Lazy<ActivationService>(CreateActivationService);
}
protected override async void OnLaunched(LaunchActivatedEventArgs args)
{
if (!args.PrelaunchActivated)
{
await ActivationService.ActivateAsync(args);
}
}
protected override async void OnActivated(IActivatedEventArgs args)
{
await ActivationService.ActivateAsync(args);
}
private ActivationService CreateActivationService()
{
return new ActivationService(this, typeof(ViewModels.LoginViewModel), new Lazy<UIElement>(CreateShell));
}
private UIElement CreateShell()
{
return new Views.ShellPage();
}
}
}
ShellPage.xaml.cs:
using System;
using BasePosteMobilite.ViewModels;
using Windows.UI.Xaml.Controls;
namespace BasePosteMobilite.Views
{
// TODO WTS: Change the icons and titles for all NavigationViewItems in ShellPage.xaml.
public sealed partial class ShellPage : Page
{
private ShellViewModel ViewModel
{
get { return ViewModelLocator.Current.ShellViewModel; }
}
public ShellPage()
{
InitializeComponent();
DataContext = ViewModel;
ViewModel.Initialize(shellFrame, navigationView, KeyboardAccelerators);
}
}
}
ViewModel.Initialize:
public void Initialize(Frame frame, WinUI.NavigationView navigationView, IList<KeyboardAccelerator> keyboardAccelerators)
{
_navigationView = navigationView;
_keyboardAccelerators = keyboardAccelerators;
NavigationService.Frame = frame;
NavigationService.NavigationFailed += Frame_NavigationFailed;
NavigationService.Navigated += Frame_Navigated;
_navigationView.BackRequested += OnBackRequested;
}