Изменить стартовую страницу в приложении, созданном с помощью Windows Template Studio - PullRequest
0 голосов
/ 15 мая 2019

Я создал приложение с 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;
}

1 Ответ

0 голосов
/ 16 мая 2019

Вы можете создать проект с функцией входа в систему, и вы увидите следующий код из метода ActivateAsync:

 var silentLoginSuccess = await IdentityService.AcquireTokenSilentAsync();
            if (!silentLoginSuccess || !IdentityService.IsAuthorized())
            {
                await RedirectLoginPageAsync();
            }

Вот и все.Если вы хотите перенаправить на свою страницу, напишите код обнаружения в методе ActivationService.ActivateAsync (args).Если вы видите, что клиент не вошел в систему. Вызовите метод перенаправления входа в систему.Вот код из шаблона студии о редиректлогине:

  public async Task RedirectLoginPageAsync()
    {
        var frame = new Frame();
        NavigationService.Frame = frame;
        Window.Current.Content = frame;
        await ThemeSelectorService.SetRequestedThemeAsync();
        NavigationService.Navigate<Views.LogInPage>();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...