我正在 WPF 中编写模式对话框。如何将 WPF 窗口设置为没有关闭按钮?我仍然希望它WindowState有一个正常的标题栏。
WindowState
我找到了ResizeMode、WindowState和WindowStyle,但这些属性都不允许我隐藏关闭按钮但显示标题栏,就像在模式对话框中一样。
ResizeMode
WindowStyle
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事件中:
Loaded
var hwnd = new WindowInteropHelper(this).Handle; SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_SYSMENU);
你去了:没有更多的关闭按钮。你也不会在标题栏的左侧有一个窗口图标,这意味着没有系统菜单,即使你右键单击标题栏 - 它们都在一起。
重要提示: 所有这些都是隐藏按钮。 用户仍然可以关闭窗口!如果用户按下Alt+F4或通过任务栏关闭应用程序,窗口仍将关闭。
Alt
F4
如果您不想让窗口在后台线程完成之前关闭,那么您也可以按照 Gabe 的建议覆盖OnClosing并设置Cancel为 true。
OnClosing
Cancel