小编典典

如何在 WPF 窗口中隐藏关闭按钮?

all

我正在 WPF 中编写模式对话框。如何将 WPF 窗口设置为没有关闭按钮?我仍然希望它WindowState有一个正常的标题栏。

我找到了ResizeModeWindowStateWindowStyle,但这些属性都不允许我隐藏关闭按钮但显示标题栏,就像在模式对话框中一样。


阅读 120

收藏
2022-06-10

共1个答案

小编典典

WPF 没有内置属性来隐藏标题栏的关闭按钮,但您可以通过几行 P/Invoke 来实现。

首先,将这些声明添加到您的 Window 类中:

private const int GWL_STYLE = -16;
private const int WS_SYSMENU = 0x80000;
[DllImport("user32.dll", SetLastError = true)]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);

然后将这段代码放入Window的Loaded事件中:

var hwnd = new WindowInteropHelper(this).Handle;
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_SYSMENU);

你去了:没有更多的关闭按钮。你也不会在标题栏的左侧有一个窗口图标,这意味着没有系统菜单,即使你右键单击标题栏 - 它们都在一起。

重要提示: 所有这些都是隐藏按钮。 用户仍然可以关闭窗口!如果用户按下Alt+F4或通过任务栏关闭应用程序,窗口仍将关闭。

如果您不想让窗口在后台线程完成之前关闭,那么您也可以按照 Gabe 的建议覆盖OnClosing并设置Cancel为 true。

2022-06-10