WPF.Как скрыть / показать главное окно из другого окна - PullRequest
6 голосов
/ 25 июля 2011

У меня есть два окна MainWindow и Login.Кнопка, которая показывает логин, расположенный в mainWindow

this.Hide();
        Login li = new Login();
        li.Show();

в Окне входа, является кнопкой, которая проверяет пароль, как я могу показать MainWindow, если пароль правильный?

Ответы [ 4 ]

10 голосов
/ 25 июля 2011

передать параметр в окно входа в систему типа MainWindow. Это позволяет окну входа в систему иметь ссылку на MainWindow:

this.Hide();
Login li = new Login(this);
li.Show();

И окно входа в систему:

private MainWindow m_parent;
public Login(MainWindow parent){
    m_parent = parent;
}

//Login Succesfull function

private void Succes(){
    m_parent.Show();
}
4 голосов
/ 27 ноября 2012

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

 public Login(MainWindow parent):this()
{
    m_parent = parent;
}
2 голосов
/ 25 июля 2011

Как насчет ....

this.Hide();
Login li = new Login();
if(li.ShowDialog() == DialogResult.OK){
   //Do something with result
   this.Show();
}

Убедитесь, что в вашем логине есть что-то вроде ...

void OnLogin(){
   if(ValidateLogin()){
      this.DialogResult = DialogResult.OK;
      this.Close();
   }
}
0 голосов
/ 25 июля 2011

Какой тип макета и т. Д. Вы используете для своего интерфейса?Если вы сделаете окно входа в систему модальным диалоговым окном, тогда вам нужно скрыть главное окно?

В качестве альтернативы, вы могли бы иметь своего рода флаг «успешно вошел в систему» ​​и привязать видимость каждого окна к этому значению- используя конвертеры, чтобы получить желаемый результат?Что-то вроде:

<Grid>
    <MainWindow Visibility="{Binding Authorized,
                      Converter={StaticResource BoolToVisibilityConverter}}"/>

    <LoginWindow Visibility="{Binding Authorized,
                Converter={StaticResource InvertedBoolToVisibilityConverter}}"/>
</Grid>

Имеет ли это смысл?

РЕДАКТИРОВАТЬ: Очевидно, что элементы в Grid на самом деле не могут быть Windows - отсюда мой первоначальный вопрос о макете выиспользуя!

...