跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

C#怎么实现程序运行时自动全屏_C#如何隐藏任务栏和标题栏【实战】

WinForm全屏需OnShown中设None边框、Bounds为Screen.PrimaryScreen.Bounds并TopMost=true;WPF需SourceInitialized后调用SetWindowPos置顶至VirtualScreen尺寸,退出时先取消TopMost再恢复窗口状态。 WinForm 窗口启动时立即全屏但保留任务栏 直接设
windowstate = formwindowstate.maximized
不够——它只是最大化,不是真正全屏(任务栏仍可见,alt+tab 也能切出)。真全屏得靠
formborderstyle = formborderstyle.none
+ 手动撑满屏幕,但必须在窗口已创建、句柄有效后操作,否则会失效。 在
OnLoad
或
Shown
事件里设置,别在构造函数或
InitializeComponent
后立刻设
Size
和
Location
用
Screen.PrimaryScreen.Bounds
获取准确分辨率,别硬写
1920x1080
——多屏或缩放比例(如 125%)下会错位 加上
TopMost = true
防止被其他窗口盖住,但注意:这会让窗口始终在最前,影响用户操作其他程序
protected override void OnShown(EventArgs e) { base.OnShown(e); this.FormBorderStyle = FormBorderStyle.None; this.WindowState = FormWindowState.Normal; // 先还原,再重设尺寸 this.Bounds = Screen.PrimaryScreen.Bounds; this.TopMost = true; }
WPF 中隐藏标题栏和任务栏的稳定写法 WPF 的
WindowStyle="None"
只去掉标题栏,不自动隐藏任务栏;要彻底“沉浸”,得配合
ResizeMode="NoResize"
和手动设置
Width
/
Height
,且必须等
SourceInitialized
事件触发后再操作窗口句柄——这是最容易漏的一步。
AllowsTransparency="True"
必须开启才能用
WindowStyle="None"
,否则运行时报错
InvalidOperationException
隐藏任务栏不是靠 WPF 自身属性,而是调用 Win32 API:
SetWindowPos
把窗口 Z 序置顶,并设
SWP_SHOWWINDOW | SWP_NOACTIVATE
避免抢焦点 多 DPI 场景下,
SystemParameters.VirtualScreenHeight
比
Screen.Bounds
更可靠
private void Window_SourceInitialized(object sender, EventArgs e) { var hwnd = new WindowInteropHelper(this).Handle; SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, (int)SystemParameters.VirtualScreenWidth, (int)SystemParameters.VirtualScreenHeight, SWP_SHOWWINDOW | SWP_NOACTIVATE); }
退出全屏时恢复任务栏可见性的关键时机 按 Esc 或热键退出全屏,如果只改
FormBorderStyle
或
WindowStyle
,任务栏大概率卡在隐藏状态——因为 Windows 任务栏的显示逻辑依赖窗口的
Z order
和激活状态,不是单纯样式切换就能触发。 C知道 CSDN推出的一款AI技术问答工具 下载 必须调用
SetForegroundWindow
或
Focus()
让别的窗口(比如桌面)获得焦点,任务栏才会响应显示 还原前先设
TopMost = false
,否则即使窗口变小了,任务栏仍被压在下面 WinForm 中建议用
this.WindowState = FormWindowState.Normal
+
this.FormBorderStyle = FormBorderStyle.Sizable
组合,顺序不能反 多显示器环境下全屏的常见误判 用
Screen.AllScreens
遍历时,容易默认取第一个屏幕(
[0]
),但用户可能把主窗口拖到了副屏,此时全屏会错跑到主屏上。 正确做法是根据窗口当前所在屏幕获取边界:
Screen.FromControl(this).Bounds
(WinForm)或
Screen.FromHandle(hwnd)
(WPF) WPF 中
SystemParameters.WorkArea
返回的是“可用区域”(已扣除任务栏),全屏时要用
VirtualScreen
系列属性 远程桌面或某些显卡驱动下,
Screen.PrimaryScreen
可能返回错误值,建议加一层 fallback 判断 任务栏是否真正隐藏,不取决于你设了什么属性,而取决于 Windows 是否认为你的窗口“正在独占桌面”。这个判断藏在窗口消息循环和 Z order 层级里,很多看似生效的操作其实只是表面变化。

相关文章