如何隐藏在一个方法中创建的窗口实例,在另一个方法中?
我有一个带有“注册”按钮的登录窗口,当您单击该窗口时,注册窗口正在打开,而登录窗口则处于隐藏状态(工作正常)。 现在的问题是,我在注册窗口上有一个“返回”按钮,该按钮应隐藏注册窗口并显示登录窗口。 我可以使用“ 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()方法也是一样。
我想要的结果只是隐藏了“注册”窗口并且显示了“登录”窗口。
答案 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中将其触发,现在可以使用。
无论如何...谢谢大家的快速答复和帮助!!!