关闭子窗口可最大限度地减少父级

wfo*_*orl 10 wpf dialog window minimize

下面的代码演示了一个问题,我关闭子窗口最小化父窗口,我不想发生.

    class SomeDialog : Window
    {
        protected override void OnMouseDoubleClick(MouseButtonEventArgs e)
        {
            base.OnMouseDoubleClick(e);
            new CustomMessageBox().ShowDialog();
        } 
    }

    class CustomMessageBox : Window
    {
        public CustomMessageBox()
        {
            Owner = Application.Current.MainWindow;
        }
    }

    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        protected override void OnMouseDoubleClick(MouseButtonEventArgs e)
        {
            base.OnMouseDoubleClick(e);
            new SomeDialog() { Owner = this }.Show();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Window1是主应用程序窗口.

SomeDialog是一个窗口,它弹出Window1中的某个事件(在示例中双击window1),需要是无模式的.

CustomMessageBox是一个窗口,弹出一些需要模态的 "SomeDialog"(在示例中双击SomeDialog)中的某个事件.

如果您运行该应用程序,然后双击Window1的内容以显示SomeDialog,然后双击SomeDialog的内容以显示CustomMessagebox.

现在关闭CustomMessagebox.精细.

现在,如果你关闭SomeDialog,Window1最小化?为什么它最小化,我怎么能阻止它?

编辑:使用Viv提出的技术,似乎解决方法相当简单.

class SomeDialog : Window
    {
        protected override void OnMouseDoubleClick(MouseButtonEventArgs e)
        {
            base.OnMouseDoubleClick(e);
            new CustomMessageBox().ShowDialog();
        }

        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            base.OnClosing(e);
            Owner = null;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Viv*_*Viv 11

为什么它最小化,我怎么能阻止它?

不确定"为什么"也许您可以将其报告为错误并查看他们回复的内容,就像非模态对话框一样,您不希望这种情况发生.

至于解决方法,尝试这样的事情:

public partial class MainWindow : Window {
  ...

  protected override void OnMouseDoubleClick(MouseButtonEventArgs e) {
    base.OnMouseDoubleClick(e);
    var x = new SomeDialog { Owner = this };        
    x.Closing += (sender, args) => {
      var window = sender as Window;
      if (window != null)
        window.Owner = null;
    };
    x.Show();
  }
}
Run Code Online (Sandbox Code Playgroud)

^^这应该防止MainWindow(父)在SomeDialog关闭时最小化.

  • 为我工作,谢谢!这里有一个小修改来简化回调(因为您知道发送者是谁): `x.Closing += (sender, args) => { x.Owner = null; };` (2认同)

LPL*_*LPL 5

我解决这个有趣问题的方法是激活 MainWindow 一次,然后再次激活 SomeDialog 窗口。

class SomeDialog : Window
{
    protected override void OnMouseDoubleClick(MouseButtonEventArgs e)
    {
        base.OnMouseDoubleClick(e);
        new CustomMessageBox().ShowDialog();
        Owner.Activate();
        Activate();
    }
}
Run Code Online (Sandbox Code Playgroud)


Luq*_*sen 5

一个很晚的答案......我只是坐在那里遇到了同样的问题,而 Viv 的解决方法也为我解决了这个问题。至于答案的“为什么”部分,我相信当您的子窗口在其生命周期中产生自己的子窗口时会发生这种情况。根据我的经验,每当按下我的保存按钮时就会发生这种情况,这是在需要打开子窗口的流程中。但是按取消(或转义)或 Windows 默认退出按钮并没有引起问题。