Откройте новое окно после первого - PullRequest
9 голосов
/ 20 февраля 2011

Как это можно сделать

Сначала откроется окно входа в систему, и если все в порядке, просто закройте окно входа и откройте второе главное окно.в формах win мы изменяем program.cs, но в wpf нет program.cs.

Любые решения .?

На самом деле большую часть работы я выполнил в окне, которое создается по умолчанию, итеперь хочу сделать его второстепенным (значит, он должен появляться, а затем закрываться, когда требуется передать управление новому окну)

   <Application x:Class="DevnMark_V1._0.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Startup="Application_Startup">

    <Application.Resources>

    </Application.Resources>
</Application>



 public partial class App : Application
    {
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            var login = new MainWindow();
            login.ShowDialog();
            if (myAppSett.Default.validated == true)
            {
            var mainWindow = new DevNMarkMainWindow();              
                mainWindow.ShowDialog();
            }
        }

Начало окна входа в XMLокно и появляется в точке InitializeComponent(); второго окна, когда оно просматривается, когда оно будет инициализировано

Ответы [ 3 ]

7 голосов
/ 26 августа 2011

Я решил эту проблему следующим образом:

  1. Я удалил из App.xaml StartupUri="MainWinodw.xaml", оставив только Startup="Application_Startup".

  2. В Application_Startup я НЕМЕДЛЕННО ссылался на оба логина и главные окна:

    loginwindow Login = new loginwindow();
    mainwindow Main = new mainwindow();
    
  3. Я подтвердил свой логин, затем закрыл окно логина и открыл главное окно простым .Show():

    Login.ShowDialog();
    if (!Login.DialogResult.HasValue || !Login.DialogResult.Value)
    {
        Application.Current.Shutdown();
    }
    
    main.Show();
    

Без изменений ShutdownMode.

4 голосов
/ 20 февраля 2011

Возможно, не существует program.cs, но в шаблоне программы WPF по умолчанию есть файл App.xaml.cs, и вы можете сделать то же самое там.

То, что вы хотите сделать, это удалить StartupUri="LoginWindow.xaml" из App.xaml и затем изменить конструктор App.xaml.cs, чтобы вызвать ваше окно входа в систему и ваше главное окно, например:

public App() : base() {
    bool authenticated = false;
    LoginWindow login;
    while (!authenticated)
    {
        login = new LoginWindow();
        login.ShowDialog();
        authenticated = ValidUser(login.username, login.password);
    }

    MainWindow main = new MainWindow(login.username);
    main.ShowDialog();
}

В приведенном выше примере предполагается, что вы добавили username и password в качестве открытых свойств для LoginWindow и что вы изменили конструктор MainWindow для получения параметра.

0 голосов
/ 31 августа 2011

Предложенный метод OnExplicitShutdown работает, и вы можете избежать явного закрытия приложения во втором окне, просто открыв его с помощью ShowDialog, за которым следует this.Shutdown (), все в App.xaml, таким образом, не мешая остальной части приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...