隐藏 Window 的实例

Hide an Instance of a Window

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

我有一个带有按钮 "Register" 的登录 Window,当您单击该按钮时,Register-Window 正在打开,而 Login-Window 正在隐藏(工作正常)。 现在的问题是,我在 Register-Window 上有一个按钮 "Back",它应该隐藏 Register Window 并显示 Login Window。 我可以用 "Application.Current.MainWindow.Show();" 显示登录 Window,但我不知道如何隐藏注册 -Window。通常我会选择 "Regis.Hide()",但我不能这样做,因为我在方法中有 Regis 的实例,它打开了寄存器 Window。

我明白,如果我在第二个方法中创建第二个实例并隐藏它,那将不起作用,因为现在有 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.
}

我的视图模型:

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

Open() 方法也是如此。

我想要的结果只是寄存器 Window 隐藏,登录 Window 显示。

这将通过使 regis 成为整个 class 可以访问的成员变量来解决您的问题...

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

有不同的方法可以做到这一点,但这个方法确保只有一个寄存器实例 window 并为您提供所需的 show/hide 能力。

只需使用 regis.hide(); 希望它对你有用。

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

此处您想将一个函数变量用于另一个

全局声明 regis 而不是在您第一次使用它的方法中初始化它。

In this way there will be only one instance of regis .

现在你可以

regis.Hide()

regis.Show()

在您的任何方法中 class

我找到了解决方案:

我启动了 Open() 方法(效果很好)。 当我想触发 Back() 方法时,我不小心创建了一个 "OpenRegistrationGui" 的实例并试图关闭它,但显然不能,因为它是另一个实例。 我将 属性 "RegisBackCommand" 设置为静态并现在直接从 ViewModel 触发它,现在可以正常工作了。

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