在Avalonia中实现自定义标题栏需设HasSystemDecorations="False"、ExtendClientAreaToDecorationsHint="True",用Grid布局标题栏并添加drag-region样式,再为按钮绑定Close、WindowState切换等逻辑。

在 Avalonia 中实现自定义窗口标题栏(即无边框窗口),核心是关闭系统原生边框 + 手动绘制标题栏区域 + 自行处理拖拽、最小化、最大化、关闭等窗口操作。这需要配合 Window 的属性设置、XAML 布局控制,以及 C# 事件逻辑。
1. 启用无边框窗口模式
在窗口 XAML 中,将 Window 的 HasSystemDecorations 设为 false,并建议同时设置 ResizeMode="CanResize"(否则无法拖拽调整大小):
ResizeMode="CanResize"
ExtendClientAreaToDecorationsHint="True">
注意:ExtendClientAreaToDecorationsHint="True" 是关键,它让客户端区域(即你的 UI)能延伸到系统标题栏位置,从而允许你在顶部绘制自定义标题栏。
2. 在 XAML 中手动布局标题栏
推荐使用 Grid 划分顶部标题栏区域(例如高度 32px),并添加拖拽区、图标、标题文本和控制按钮:
- 顶部
Grid.Row="0"区域设为Height="32",背景色可自定义 - 内部放一个
TextBlock显示窗口标题(绑定{Binding Title}或硬编码) - 右侧放三个
Button:最小化、最大化/还原、关闭(图标可用Path或字体图标) - 整个标题栏区域需设置
Classes="titlebar"并在 CSS 中加-avalonia-extensions: drag-region;(见下一步)
3. 标记可拖拽区域(关键!)
Avalonia 使用 CSS 扩展属性标记哪些区域支持窗口拖拽。在 Styles.xaml 或内联样式中添加:
标签: css windows 编码 win c# grid布局
还木有评论哦,快来抢沙发吧~