WPF.如何隐藏/显示主窗口从另一个窗口

本文关键字:窗口 显示 另一个 何隐藏 隐藏 WPF | 更新日期: 2023-09-27 18:03:29

我有两个windows主窗口和登录。显示登录的按钮位于mainWindow

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

登录窗口是检查密码的按钮,如果密码正确,我如何显示主窗口?

WPF.如何隐藏/显示主窗口从另一个窗口

传递一个参数给MainWindow类型的loginwindow。这允许登录窗口有一个对主窗口的引用:

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();
}

第一个答案是好的,但它会创建一个新的空窗口要避免这个问题(重定向到先前创建的窗口),只需像这样修改构造函数

 public Login(MainWindow parent):this()
{
    m_parent = parent;
}

....

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();
   }
}

你的UI使用什么样的布局等?如果你使登录窗口一个模态对话框,那么你需要隐藏主窗口吗?

或者,您可以有某种"成功登录"标志,并将每个窗口的可见性绑定到此值-使用转换器获得所需的结果?类似以下语句:

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

明白了吗?

编辑:显然,网格中的元素实际上不能是Windows -因此我最初的问题关于你正在使用的布局!