隐藏窗口实例

时间:2019-07-18 07:38:06

标签: c# wpf instance show-hide

如何隐藏在一个方法中创建的窗口实例,在另一个方法中?

我有一个带有“注册”按钮的登录窗口,当您单击该窗口时,注册窗口正在打开,而登录窗口则处于隐藏状态(工作正常)。 现在的问题是,我在注册窗口上有一个“返回”按钮,该按钮应隐藏注册窗口并显示登录窗口。 我可以使用“ Application.Current.MainWindow.Show();”显示登录窗口,但是我不知道如何隐藏注册窗口。通常,我只会去“ Regis.Hide()”,但是我不能这样做,因为我在方法中有Regis的实例,这会打开“注册”窗口。

我了解,如果我在第二个方法中创建第二个实例并将其隐藏,那将不起作用,因为现在有2个单独的实例。 但是正如我所说,我也不知道该怎么做。

OpenRegistrationGui:

ICommand _RegisterBack;
public void Open()
{
    Application.Current.MainWindow.Hide();
    Register regis = new Register();
    regis.Show();
}

public ICommand RegisBackCommand
    {
        get
        {
            if (_RegisterBack == null)
            {
                _RegisterBack = new RelayCommand(
                    param => Back()
                    );
            }
            return _RegisterBack;
        }
    }

public void Back()
{
    Application.Current.MainWindow.Show();
    //I Want to Hide the Regis here, but i cant use the Instance from above.
}

MyViewModel:

OpenRegistrierungsGUI RegisGUI = new OpenRegistrierungsGUI();
public ICommand RegisBack
    {
        get => RegisGUI.RegisBackCommand;
        set => RegisBack = RegisGUI.RegisBackCommand;
    }

Open()方法也是一样。

我想要的结果只是隐藏了“注册”窗口并且显示了“登录”窗口。

4 个答案:

答案 0 :(得分:2)

这将使regis成为整个类都可以访问的成员变量,从而解决您的问题。

private Register regis;

public void Open()
{
    Application.Current.MainWindow.Hide();

    // Create the register window, if it doesn't exist
    if (regis == null)
    {
        regis = new Register();
    }

    regis.Show();
}

public void Back()
{
    // hide the register window, if it exists
    if (regis != null)
    {
        regis.Hide();
    }

    Application.Current.MainWindow.Show();
}

执行此操作的方法有很多,但此方法只能确保注册窗口的一个实例,并为您提供所需的显示/隐藏功能。

答案 1 :(得分:0)

希望仅使用regis.hide();为您服务。

private Register regis;
 public void Back()
        {
        Application.Current.MainWindow.Show();
        regis.hide();
        }

在这里您要将一个函数变量用于另一个

答案 2 :(得分:0)

全局声明regis,而不是在首次使用它的方法中对其进行初始化。

  

通过这种方式,只有一个regis实例。

现在您可以做到

regis.Hide()

regis.Show()

使用您班上的任何方法

答案 3 :(得分:0)

我找到了解决方法:

我触发了Open()方法(效果很好)。 当我想触发Back()方法时,我无意中创建了一个“ OpenRegistrationGui”实例,并试图关闭它,显然是做不到的,因为它是另一个实例。 我将属性“ RegisBackCommand”设置为“静态”,现在直接从ViewModel中将其触发,现在可以使用。

无论如何...谢谢大家的快速答复和帮助!!!