布局组件
QWidget 的布局全部由元素嵌套完成,没有Width / Height / Margin 这类像素属性;尺寸由主页网格和布局容器决定。
容器类型
Container
Container 适合做卡片;只想排版不想加视觉时用 Row / Column。
Row / Column
Grid
子元素支持附加属性:
Grid.Row:0 起Grid.Column:0 起Grid.RowSpan:默认 1Grid.ColumnSpan:默认 1
Tabs
Tabs.Default:默认选中索引,0 起。TabItem.Title:页签标题,必填。- 选中状态只存在内存,不持久化。
- 所有
TabItem都会在挂载时解析;Data也是预取的,切换页签不闪。
List
Items:数组路径,必填;可写{Data.Items}或Data.Items。As:项变量名,默认item(大小写敏感)。ListItem:必须且只能一个,内部只能有一个根元素。- 项内可用
{Item.Xxx}和{Index}。 - 最多渲染 200 项;空数组显示
EmptyText。
If
Test 为真值判断:False / 空字符串 / 0 / null / 空数组视为假。
Divider / Spacer
Divider:1px 分隔线。Spacer:固定像素间距;内部实现同时设置宽高,横向/纵向都可使用。
Page 内容
Container、Row、Column、Grid、If、Tabs、TabItem、List、ListItem 都可以用 Content="{PageName}" 引用 Page,替代内联子节点:
Content 与子元素互斥;详见 Page 系统。
自适应尺寸
自定义组件渲染在主页网格单元内,宽度和高度随用户拖动改变:- 顶层
Container/Row/Column/Grid/Tabs/List会拉伸到网格单元高度;Text、Button等普通节点保持内容高度。 - 整个组件在内容超出网格单元时滚动;顶层
List和Tabs的内容区会优先自己滚动。 - 用单个顶层
Container或Column包住整张卡片,背景/边框才能铺满;多个顶层节点会按内容高度排列,底部可能留空。 Justify="Between"可把顶部和底部内容分开;Row Wrap="True"适合宽度变窄时换行。Grid的列数固定,不会随宽度自动改变;窄卡片请减少Columns或改用Row Wrap。
声明式断点
When 支持 Size.Width / Size.Height / Size.PixelWidth / Size.PixelHeight,运算符 <、<=、>、>=、==、!=,可用 and / or 连接。XML 属性里的 < 写成 <。
脚本式断点
Resize 在尺寸变化后防抖触发;首次布局可在 Loaded 函数里读取 Size。
常见布局
左右分栏限制与坑
- 容器内容就是子元素;不要在容器里直接写裸文本。
Grid的附加属性只对直接子元素生效。- 没有像素宽高,组件尺寸由主页网格的格子决定;需要内部滚动时由外层组件处理。
- 过深嵌套、大量列表项会拖慢渲染;单组件元素上限 1000。