这是一个平凡的问题,但在我看来,在WPF中没有内置的方法。似乎只有WindowState
属性作为枚举无效,因为我无法判断窗口在最小化之前是处于Normal
还是Maximized
状态。
单击任务栏图标时,窗口正在按预期恢复,假设其先前状态,但我似乎无法找到任何已定义的方法。
所以我一直想知道我是否只是缺少一些东西,或者我是否需要使用一些自定义交互逻辑。
(我将发布我当前的解决方案作为答案)
答案 0 :(得分:76)
不确定这会对每个人都有效,但我今天遇到了这个问题,并且团队中的someone建议“你试过正常 ”吗?
原来他是对的。以下似乎很好地恢复了您的窗口:
if (myWindow.WindowState == WindowState.Minimized)
myWindow.WindowState = WindowState.Normal;
工作正常,如果需要,将窗口恢复为最大化。检查最小化状态似乎至关重要,因为第二次调用 WindowState.Normal 会将窗口“恢复”到非最大化状态。
希望这有帮助。
答案 1 :(得分: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,
}
}
答案 2 :(得分:10)
SystemCommands 类有一个名为 RestoreWindow 的静态方法,可将窗口恢复到以前的状态。
SystemCommands.RestoreWindow(this); // this being the current window
[注意: SystemCommands 类是.NET 4.5+ (MSDN Ref)的一部分,用于针对早期版本的Framework的项目可以使用WPF Shell扩展(MSDN Ref)]
答案 3 :(得分:3)
以下是我现在要恢复的方法:我处理StateChanged
事件以跟踪最后一个不是Minimized
的状态
WindowState _lastNonMinimizedState = WindowState.Maximized;
private void Window_StateChanged(object sender, EventArgs e)
{
if (this.WindowState != System.Windows.WindowState.Minimized)
{
_lastNonMinimizedState = WindowState;
}
}
要恢复i,则必须分别设置WindowState
:
this.WindowState = _lastNonMinimizedState;
答案 4 :(得分:3)
出于某种原因,
WindowState = WindowState.Normal;
对我不起作用。 所以我使用了以下代码&amp;它工作..
Show();
WindowState = WindowState.Normal;
答案 5 :(得分:1)
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;
}
答案 6 :(得分:0)
在原生Windows中,您可以使用ShowWindow(SW_RESTORE)
将窗口恢复到以前的状态:
激活并显示窗口。如果窗口最小化或最大化,系统会将其恢复到原始大小和位置。应用程序应在还原最小化窗口时指定此标志。
肯定有.Net对应。