如何在代码隐藏中恢复最小化的窗口?

这是一个平凡的问题,但在我看来,在WPF中没有内置的方法。 只有似乎是WindowState属性是一个枚举没有帮助,因为我不能告诉窗口是否处于NormalMaximized状态之前被最小化。

当单击任务栏图标窗口正在恢复正常,假设其以前的状态,但我似乎无法find任何定义的方法,这样做。

所以我一直在想,如果我只是缺less的东西,或者如果我需要使用一些自定义的交互逻辑。

我会张贴我当前的解决scheme作为答案

不知道这对每个人都适用,但今天我遇到了这个问题,团队中有人提出“ 你有没有试过Normal ”?

原来他是对的。 以下似乎很好地恢复你的窗口:

 if (myWindow.WindowState == WindowState.Minimized) myWindow.WindowState = WindowState.Normal; 

这工作得很好,如果需要恢复窗口最大化。 首先检查最小化状态似乎很重要,因为调用WindowState.Normal第二次会将窗口“还原”到其非最大化状态。

希望这可以帮助。

WPF的观点是这是一个操作系统function。 如果你想搞乱操作系统的function,你可能不得不弄脏你的手。 幸运的是,他们为我们提供了这样做的工具。 这是一个联合国最小化的方法,采取WPF窗口,并使用WIN32来完成的效果,而不logging任何状态:

 public static class Win32 { public static void Unminimize(Window window) { var hwnd = (HwndSource.FromVisual(window) as HwndSource).Handle; ShowWindow(hwnd, ShowWindowCommands.Restore); } [DllImport("user32.dll")] private static extern bool ShowWindow(IntPtr hWnd, ShowWindowCommands nCmdShow); private enum ShowWindowCommands : int { /// <summary> /// Activates and displays the window. If the window is minimized or /// maximized, the system restores it to its original size and position. /// An application should specify this flag when restoring a minimized window. /// </summary> Restore = 9, } } 

SystemCommands类有一个名为RestoreWindow的静态方法,将窗口恢复到以前的状态。

 SystemCommands.RestoreWindow(this); // this being the current window 

[注意: SystemCommands类是.NET 4.5+ (MSDN参考)的一部分,用于面向早期版本Framework的项目可以使用WPF Shell扩展(MSDN参考) ]

下面是我如何得到它现在恢复:我处理StateChanged事件,以跟踪最后一个没有Minimized状态

 WindowState _lastNonMinimizedState = WindowState.Maximized; private void Window_StateChanged(object sender, EventArgs e) { if (this.WindowState != System.Windows.WindowState.Minimized) { _lastNonMinimizedState = WindowState; } } 

要恢复我然后必须分别设置WindowState

 this.WindowState = _lastNonMinimizedState; 

嗯,接受的答案不适合我。 从任务栏中调出的“最大化”窗口最终会在屏幕上居中alignment(以正常大小显示,即使其状态为“最大化”),而通过标题栏拖动窗口等操作也不起作用。 最后(几乎是通过试验和错误),我想出了如何做到这一点。 感谢@HB和@Eric Liprandi指导我解答! 代码如下:

 private bool windowIsMinimized = false; private WindowState lastNonMinimizedState = WindowState.Normal; private void Window_StateChanged(object sender, EventArgs e) { if (this.windowIsMinimized) { this.windowIsMinimized = false; this.WindowState = WindowState.Normal; this.WindowState = this.lastNonMinimizedState; } else if (this.WindowState == WindowState.Minimized) { this.windowIsMinimized = true; } } private void Window_MinimizeButtonClicked(object sender, MouseButtonEventArgs e) { this.lastNonMinimizedState = this.WindowState; this.WindowState = WindowState.Minimized; this.windowIsMinimized = true; } private void Window_MaximizeRestoreButtonClicked(object sender, MouseButtonEventArgs e) { if (this.WindowState == WindowState.Normal) { this.WindowState = WindowState.Maximized; } else { this.WindowState = WindowState.Normal; } this.lastNonMinimizedState = this.WindowState; } 

因为某些原因,

 WindowState = WindowState.Normal; 

没有为我工作。 所以我用下面的代码和它的工作..

  Show(); WindowState = WindowState.Normal; 

在本机窗口中,您可以使用ShowWindow (SW_RESTORE)将窗口恢复到以前的状态:

激活并显示窗口。 如果窗口被最小化或最大化,则系统将其恢复到其原始大小和位置。 应用程序应该在还原最小化窗口时指定此标志。

毫无疑问,.net与此相对应。

在最小化之后尝试恢复时要小心。 我只是解决了一个问题,即将WindowState设置为“正常”并未按预期恢复窗口。 这个问题最终在最小化之后以及在将其设置回正常之前更改了“可见性”属性(“折叠”)。