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

233

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

我找到了ResizeModeWindowStateWindowStyle,但这些属性都不能隐藏关闭按钮,同时显示标题栏,就像模态对话框一样。


9
这是一个运行于后台线程的进度对话框,不支持取消操作;我猜我只是想让它不必支持取消(至少现在不需要)。不过你可能是对的。 - Michael Hedgpeth
1
我也讨厌应用程序试图移除窗口装饰。如果我制作进度对话框,我总是使窗口关闭按钮执行与单击实际取消按钮相同的逻辑。 - Christian Hayter
13
针对 Chris:假设你的软件用于视频监控。夜间,一名安保人员(这是他的工作)需要保持窗户开着... 但有时候他们的工作很无聊,想上网冲浪或者因为任何原因关闭视频矩阵的窗口,去除窗口按钮是正确的做法。 - Jean-Marie
7
“为什么你想这样做?我认为这是非常糟糕的用户界面设计。” - 当程序显示一个对话框,只有“确定”,“取消”和“关闭”按钮时,称其为非常糟糕的用户界面设计。对于用户来说,“关闭”按钮可能不够明显。它是“取消”还是“提交”? 共识是在对话框中不包括关闭按钮 - user585968
2
@Jean-Marie 隐藏关闭按钮并不能防止这种情况发生,它只是愚弄了那些不知情和懒惰(去谷歌搜索)的人。隐藏关闭按钮只能防止点击该按钮。Win键和Alt键组合仍将像往常一样工作。“正确”的方法是为工人创建一个用户帐户,并使用组策略防止他们打开/安装除批准软件以外的任何软件。然后有一个管理员帐户,监管人员可以访问,以处理任何维护问题。 - Digital_Utopia
显示剩余2条评论
24个回答

-1
如果只需要禁止用户关闭窗口,这是一个简单的解决方案。
XAML 代码: IsCloseButtonEnabled="False" 它会阻止按钮。

-1

跳转到窗口属性设置

window style = none;

你不会得到关闭按钮...


踩一下。实际上是 WindowStyle = "None" - 注意语法。另外,这是一种散弹式的方法,也会移除标题栏,使窗口变得丑陋且没有标题,而有很多更好的处理方法(正如其他答案所证明的那样),并且是一个重复的答案。 - vapcguy

-1

在寻找答案很久后,我想出了这个简单的解决方案,并希望在这里分享,以帮助其他人。

我设置了WindowStyle=0x10000000

这将为窗口样式设置WS_VISIBLE (0x10000000)WS_OVERLAPPED (0x0)值。 "Overlapped"是显示标题栏和窗口边框所必需的值。 通过从我的样式值中移除WS_MINIMIZEBOX (0x20000)WS_MAXIMIZEBOX (0x10000)WS_SYSMENU (0x80000)值,所有标题栏按钮均被删除,包括关闭按钮。


在WPF中,WindowStyle是一个枚举类型,其值与Windows API常量不匹配;强制转换为WindowStyle枚举类型将不起作用。为了确保,我已经在ILSpy中检查了.NET源代码;枚举值在私有函数CreateWindowStyle中被翻译为Windows API,如果该函数遇到未知的WindowStyle值,则简单地应用WindowStyle.None。(唯一的方法是使用反射使用内部属性_Style_StyleEx,我强烈建议不要这样做。) - Mike Rosoft

-2
使用WindowStyle="SingleBorderWindow",这将隐藏WPF窗口的最大化和最小化按钮。

2
无法解决隐藏“关闭”按钮的问题。 - memory of a dream

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接