显示子窗口时,父窗口最小化

时间:2011-05-01 16:54:56

标签: c# wpf

是否可以在打开子窗口时使父窗口最小化并且处于非活动状态(子窗口是模态的)? 我尝试在调用子窗口之前将WindowState属性更改为父窗口的最小化,但随后子窗口开始最小化。

3 个答案:

答案 0 :(得分:2)

不确定为什么要这样做,但这可以用一些技巧(或好的设计模式)来实现。有了技巧,你可以这样做:

来自父(form1):

       private void button1_Click(object sender, EventArgs e)
    {
        this.WindowState = FormWindowState.Minimized;
        this.ShowInTaskbar = false;
        new Form2().ShowDialog(this);
        this.WindowState = FormWindowState.Normal;
        this.ShowInTaskbar = true;
    }

虽然,我建议您重新考虑您的体系结构。

答案 1 :(得分:0)

您的设计存在缺陷。

您有两个顶级Windows,主窗体和子模式对话框。子模式对话框在Win32术语中称为拥有窗口。主要形式是非拥有的。当顶级非独占窗口最小化时,它拥有的所有窗口都被隐藏。这是桌面窗口管理器提供的功能。

documentation州:

  

拥有的窗口在隐藏时隐藏   所有者被最小化。

无论如何,你要做的事情听起来很不寻常。通常,当表单显示模式对话框时,模态对话框显示在另一个表单的顶部。你为什么要隐藏主表格?

如果你对这个设计不熟悉,你需要安排你的模态对话框是一个非拥有的窗口。执行此操作时,它将显示为任务栏中与主窗体分开的项目。这是你想要的吗?

答案 2 :(得分:-1)

在子form_Load事件中,请尝试:

frmParent frm = new frmParent();
frm.WindowState = FormWindowState.Minimized;