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

6

我有两个窗口,一个是“MainWindow”主窗口,另一个是“Login”登录窗口。

显示登录界面的按钮位于“MainWindow”主窗口上。

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

在登录窗口有一个按钮用于检查密码,如果密码正确,我该如何显示主窗口?
4个回答

12

将一个类型为MainWindow的参数传递给loginwindow。这样,登录窗口就可以引用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();
}

我使用了你的解决方案,但是登录窗口显示为空白?你知道如何解决这个问题吗? - gasroot

4

第一个答案不错,但它会创建一个新的空窗口。为了避免这个问题(重定向到先前创建的窗口),只需修改构造函数如下:

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

2

关于……

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
你的UI使用了什么样的布局等?如果你将登录窗口设置为模态对话框,那么需要隐藏主窗口吗?
或者,你可以有一些“成功登录”的标志,并将每个窗口的可见性绑定到该值 - 使用转换器来获得所需的结果?大致如下:
<Grid>
    <MainWindow Visibility="{Binding Authorized,
                      Converter={StaticResource BoolToVisibilityConverter}}"/>

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

这有意义吗?

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接