首页 / Wails 入门教程 / 窗口配置与样式

Wails 入门教程

窗口配置与样式

本教程共 42 篇 · 第 20 篇 · 更新于 2026-08-03

Wails桌面开发窗口配置Options窗口样式

20. 窗口配置与样式

本节目标

  • 知道窗口的外观参数是在 wails.Run 之前写好的。
  • 会用 Width、Height、Min/Max 系列控制窗口尺寸范围。
  • 理解启动状态、隐藏关闭、背景色与拖拽属性的写法。

20-1 配置写在哪

窗口的长相不是运行时改的,是在启动前定下来的。

所有配置都塞进 options.App 这个结构体,再传给 wails.Run

func main() {
    err := wails.Run(&options.App{
        Title:  "码上学笔记",
        Width:  1024,
        Height: 768,
        // 更多字段往下加
    })
    if err != nil {
        log.Fatal(err)
    }
}
Note

宽度和高度如果你不填,Wails 会给你默认值:宽 1024、高 768。但显式写出来更清楚,也好让同事一眼看懂。

本章只讲和窗口外观直接相关的字段。菜单、托盘、拖放那些,后面有专门的章节。

20-2 尺寸与缩放限制

WidthHeight 决定窗口刚弹出时的大小。

想禁止用户拉大拉小,设 DisableResize 为 true:

DisableResize: true,

更常见的做法是给一个范围。最小宽高、最大宽高都能单独设:

MinWidth:  400,
MinHeight: 300,
MaxWidth:  1280,
MaxHeight: 800,
Tip

如果你填的 WidthMinWidth 还小,Wails 会自动把窗口撑到最小值。所以不用自己写判断,填好范围就行。

这几个字段是”启动前写死”的。想运行时再改,去上一章看 WindowSetSizeWindowSetMinSize

20-3 启动状态与显隐

窗口一打开是什么样子,用 WindowStartState 控制。

它有三个可选值:options.Maximisedoptions.Minimisedoptions.Fullscreen

WindowStartState: options.Maximised,
Warning

老文档里有个 Fullscreen: true 字段,现在已经废弃了。新代码一律改用 WindowStartState: options.Fullscreen,别再写那个旧字段,不然以后升级会报错。

StartHidden 让窗口启动后先藏起来,等你主动 WindowShow 才露面:

StartHidden: true,

HideWindowOnClose 是个很实用的开关。默认点右上角关闭,整个程序就退出了。设成 true,点关闭只是把窗口藏起来,程序还在后台跑:

HideWindowOnClose: true,
Tip

做”关闭到托盘”的效果,这个字段是关键。否则用户一点关闭,托盘逻辑还没触发,程序就真退了。

20-4 背景色与置顶

窗口默认背景是白色。想换底色,用 BackgroundColour,类型是 *options.RGBA

BackgroundColour: &options.RGBA{R: 0, G: 0, B: 0, A: 255},

也可以用现成的构造函數。要半透明就调 NewRGBA,不透明用 NewRGB

BackgroundColour: options.NewRGBA(255, 0, 0, 128), // 半透明红
Note

这个背景色会在所有透明像素底下透出来。做毛玻璃、透明窗口时,它和 Windows 的 WindowIsTranslucent 配合才出效果。

让窗口永远盖在最上面,设 AlwaysOnTop

AlwaysOnTop: true,

适合做录屏工具、计时器这种”一直要看着”的小窗。

20-5 拖拽属性与文件拖放

无边框窗口怎么拖动?Wails 靠一个 CSS 属性来认拖拽区。

相关配置叫 CSSDragPropertyCSSDragValue,默认值分别是 --wails-draggabledrag

CSSDragProperty: "--wails-draggable",
CSSDragValue:    "drag",

也就是说,前端哪个元素写了 --wails-draggable: drag,哪里就能拖窗口。下一章会细讲。

文件拖放也有一组开关,统一放在 DragAndDrop 里:

DragAndDrop: &options.DragAndDrop{
    EnableFileDrop:     true,  // 开启拖文件进窗口
    DisableWebViewDrop: false, // 关掉网页原生拖放
    CSSDropProperty:    "--wails-drop-target",
    CSSDropValue:       "drop",
},

EnableFileDrop 打开后,拖进来的文件路径才能被运行时拿到。具体怎么用,第 25 章专门讲。

Tip

CSSDropPropertyCSSDragProperty 是两套东西。一个管”拖窗口”,一个管”拖文件落到哪个元素”,别混了。

20-6 实战:启动即最大化且固定

来个小实战。做一个笔记工具的窗口:启动就最大化,禁止用户改大小,最小宽高兜个底,关窗口不退出(留给托盘)。

err := wails.Run(&options.App{
    Title:             "码上学笔记",
    Width:             1024,
    Height:            768,
    DisableResize:     true,
    MinWidth:          800,
    MinHeight:         600,
    WindowStartState:  options.Maximised,
    HideWindowOnClose: true,
    // 下面接 AssetServer、Bind 等
})

这段配置几乎覆盖了本章所有字段。DisableResizeMinWidth 同时写并不冲突,前者锁死大小,后者只是兜底下限。

Note

WindowStartState: options.MaximisedDisableResize: true 可以共存。窗口一开就是最大,且用户也拉不动。做工具类界面很常见。

20-7 配置字段速查

把本章字段收一张表,免得来回翻:

字段作用默认
Width / Height初始大小1024 / 768
DisableResize禁止缩放false
MinWidth / MinHeight最小尺寸0
MaxWidth / MaxHeight最大尺寸0
WindowStartState启动状态Normal
StartHidden启动隐藏false
HideWindowOnClose关窗不退出false
BackgroundColour背景色
AlwaysOnTop置顶false
Frameless无边框false

这些都在 wails.Run 之前写好。启动后想改,基本都有对应的 runtime 方法,去第 19 章找。

20-8 透明与毛玻璃前瞻

顺带提一个和窗口样式强相关的话题:透明与毛玻璃。

Wails 在 Windows 上支持把 webview 和窗口做成半透明。关键是两个开关:WebviewIsTransparentWindowIsTranslucent,都写在 Windows 子选项里。

Windows: &windows.Options{
    WebviewIsTransparent: true,
    WindowIsTranslucent:  true,
    BackdropType:         windows.Mica,
},

透明生效的前提是 CSS 背景用 rgba(0,0,0,0),这样宿主窗口才会透出来。再配合本章的 BackgroundColour,就能做出磨砂质感的界面。

Note

毛玻璃是 Windows 11 的特有能力,且对系统版本有要求(build 22621 以上效果最佳)。macOS 走另一套 WindowIsTranslucent 配置。这些平台差异后面打包章节会细说,这里先有个印象。

Tip

想验证透明是否生效,先把窗口背景设为全透明黑 rgba(0,0,0,0),再看桌面能不能透出来。如果还是纯色,多半是 WebviewIsTransparent 没开,或 CSS 某层把背景盖实了。

20-9 排错清单

配置类问题,几个高频坑。

第一,Fullscreen: true 编译告警或报错。那是废弃字段,改用 WindowStartState: options.Fullscreen

第二,填了 Width 却被撑到 MinWidth。这是正常行为,Wails 会保证窗口不小于下限,不用自己写判断。

第三,背景色不生效。确认你用的是 *options.RGBA 指针,且 Alpha 通道设置正确。想要透明,还得配合 Windows 的 WebviewIsTransparent

第四,改了配置没反应。配置是启动前生效的,程序跑起来再改字段没用,要用第 19 章的 runtime 方法。

Tip

不确定某个字段默认是什么,去官方 options 文档查默认值,再决定要不要显式写。大多数情况用默认最省心,只覆盖你真正要改的。另外,字段名写错编译会直接报错,这反而是好事,能立刻发现。最怕字段名对、值类型却不对,比如把布尔写成字符串,运行时行为诡异,所以对着文档抄最稳。

常见误区

Warning

Fullscreen: true 已废弃。新代码用 WindowStartState: options.Fullscreen,写成旧字段会在新版本编译告警甚至报错。

Note

配置类字段都是启动前生效的。启动后想改,基本都有对应的 runtime 方法,去 runtime.Window 或对应章节找。

Tip

背景色用 options.NewRGBA 比手写结构体更稳,少敲几个字段还不容易漏掉 Alpha 通道。