Приложение оболочки не загружает весь свой компонент после окна входа в призму WPF - PullRequest
0 голосов
/ 05 ноября 2018

У нас есть окно входа в наше приложение, которое будет загружено перед загрузкой приложения оболочки. После аутентификации это только время, когда должно появиться окно оболочки. Но, к сожалению, после аутентификации окно оболочки не загружает весь свой компонент. Вот снимок экрана:

Here is the screen capture

Приведенный ниже код, который я использовал после входа в систему, покажет и запустится приложение оболочки.

 protected override void InitializeShell()
    {
        Window login = new LoginView();
        var loginVM = new LoginViewModel(new LoginAuth());
        loginVM.LoginCompleted += (sender, args) =>
        {
            login.Close();
            Application.Current.MainWindow.Show();
        };
        login.DataContext = loginVM;
        login.ShowDialog();
    }

В моем приложении WPF есть app.xaml, который загружает код shell.xaml.

<Application x:Class="...Shell.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:...Shell">
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/...Presentation;component/Styles/ExtendedTextBoxStyle.xaml"/>
            <ResourceDictionary Source="/..;component/Styles/Styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

По крайней мере, должен иметь контент. Пробный код shell.xaml ниже.

enter image description here

У меня должно быть меню слева после аутентификации из окна входа в систему, но оно не загружает все компоненты.

enter image description here

Есть ли здесь какой-нибудь пропущенный код, есть ли какая-либо другая реализация, которая может решить мою проблему? Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Содержание должно быть не менее.

Должно ли это? Вам нужно что-то добавить в регион (-ы), например, сразу после возврата метода ShowDialog(). И не стоит звонить Application.Current.MainWindow.Show(). Prism покажет вам окно оболочки, как только будет возвращен вызов метода ShowDialog() в LoginView. Попробуйте это:

protected override Window CreateShell()
{
    return new ShellWindow();
}

protected override void InitializeShell(Window shell)
{
    Window login = new LoginView();
    var loginVM = new LoginViewModel(new LoginAuth());
    loginVM.LoginCompleted += (sender, args) =>
    {
        login.Close();
    };
    login.DataContext = loginVM;
    login.ShowDialog();

    IRegionManager regionManager = Container.Resolve<IRegionManager>();
    IRegion region = regionManager.Regions[RegionNames.ContentRegion];
    if (region != null)
        region.Add(new TextBlock() { Text = "test content..." });
}
0 голосов
/ 05 ноября 2018

ShowDialog является блокирующим вызовом, таким образом останавливая процесс начальной загрузки. Вы должны использовать Show, чтобы показать окно входа в систему.

protected override void InitializeShell()
{
    Window login = new LoginView();
    var loginVM = new LoginViewModel(new LoginAuth());
    loginVM.LoginCompleted += (sender, args) =>
    {
        login.Close();
        Application.Current.MainWindow.Show();
    };
    login.DataContext = loginVM;
    // problem below:
    login.ShowDialog();
}
...