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

H.B*_*.B. 41 wpf state window restore minimize

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

单击任务栏图标时,窗口正在按预期恢复,假设其先前状态,但我似乎无法找到任何已定义的方法.

所以我一直想知道我是否只是缺少一些东西,或者我是否需要使用一些自定义交互逻辑.

(我将发布我当前的解决方案作为答案)

Eri*_*ndi 81

不确定这对所有人都有用,但我今天碰到了这个,团队中的某个人建议" 你试过普通 "吗?

事实证明他是对的.以下似乎很好地恢复您的窗口:

if (myWindow.WindowState == WindowState.Minimized)
    myWindow.WindowState = WindowState.Normal;
Run Code Online (Sandbox Code Playgroud)

这工作正常,如果需要,将窗口恢复到最大化.在调用WindowState时首先检查最小化状态似乎很关键.第二次将窗口"恢复"到非最大化状态.

希望这可以帮助.

  • 与HB相似的情绪花费了十分钟的时间,想知道如何在这里磕磕绊绊地看到它并且看到它只是自动的. (2认同)

Ric*_*key 14

WPF的观点是这是一个操作系统功能.如果你想搞乱操作系统功能,你可能不得不弄清楚.幸运的是,他们为我们提供了这样做的工具.这是一个UN-minimize方法,它采用WPF窗口并使用WIN32来完成效果而不记录任何状态:

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,
    }
}
Run Code Online (Sandbox Code Playgroud)


kir*_*ran 10

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

SystemCommands.RestoreWindow(this); // this being the current window
Run Code Online (Sandbox Code Playgroud)

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


Dar*_*ght 7

因为某些原因,

WindowState = WindowState.Normal;
Run Code Online (Sandbox Code Playgroud)

对我不起作用。所以我使用了以下代码 & 它工作..

 Show();
 WindowState = WindowState.Normal;
Run Code Online (Sandbox Code Playgroud)