WPF没有禁用最大化窗口的本机方法(与WinForms不同)。因此,请考虑以下关键点:
1.隐藏最大化按钮
使用WinAPI是一种可行的方法,但仅用于隐藏最大化按钮。使用以下内容:
[DllImport("user32.dll")]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
private const int GWL_STYLE = -16;
private const int WS_MAXIMIZEBOX = 0x10000;
private void Window_SourceInitialized(object sender, EventArgs e)
{
var hwnd = new WindowInteropHelper((Window)sender).Handle;
var value = GetWindowLong(hwnd, GWL_STYLE);
SetWindowLong(hwnd, GWL_STYLE, (int)(value & ~WS_MAXIMIZEBOX));
}
2. 手动处理最大化
上面的代码仍然允许最大化(例如通过双击窗口的标题)。
WPF无法控制标题栏的行为。如果要更改双击行为,则需要删除标题栏并创建自己的标题栏。看看它是如何在MahApps.Metro中完成的-链接到示例。之后处理双击事件。