WPF / C#:在新表单打开时关闭/隐藏表单的正确实现

时间:2010-04-23 15:09:17

标签: c# wpf forms show-hide

我正在寻找与winforms相似的东西,比如

// in Form 1
this.Hide();    
Form2 form = new Form2();
form.Show


// in Form 2
// if button pressed, Form 1 will be displayed, while Form 2 will be Hide.

我正在为FormEventHandler试试运气,但不知道从哪里开始。

有任何建议/想法吗?

2 个答案:

答案 0 :(得分:3)

(就本回答而言,Form1Form2代表从Windows.Window继承的类

我会推荐以下方法之一

方法1:让Form2保持活力并再次展示

在这种情况下,您需要在Form1上创建一个实例变量:

private Form2 form2;

在“切换”到Form2的代码中,执行以下操作:

if(form2 == null)
{
    form2 = new Form2();

    DependencyPropertyDescriptor.FromProperty(Window.VisibilityProperty, 
            typeof(Window)).AddValueChanged(form2, Form2_VisibilityChanged);
}

Hide();

form2.Show();

然后将此功能添加到Form1

private void Form2_VisiblityChanged(object sender, EventArgs e)
{
    if(form2.Visility == Visibility.Hidden) Show();
}

现在,您只需在Hide();内拨打Form2即可切换回Form1

方法2:每次关闭Form2并打开新实例

这更容易,更符合您的要求:

Form2 form2 = new Form2();

form2.Closed += Form2_Closed;

Hide();

form2.Show();

同样,将此功能添加到Form1

private void Form2_Closed(object sender, EventArgs e)
{
    Show();
}

现在,不要在Hide();中致电Form2,而是致电Close();

答案 1 :(得分:1)

Visiblity的{​​{1}}属性可以设置为Window以隐藏它。所以如果你在Hidden

Window1

要再次显示该窗口,只需更改其this.Visibility = Visibility.Hidden; Window2 win = new Window2(); win.Show();