当前位置: 首页 > news >正文

WPF布局

一、Grid 容器 —— 表格布局

Grid 就像一张表格,你可以自由定义有多少行、多少列,然后把子元素放到指定的"格子"里。

  • RowDefinition定义行
  • ColumnDefinition定义列
  • 子元素通过Grid.RowGrid.Column属性指定放在哪一行哪一列
<Grid> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Button Content="左上" Grid.Row="0" Grid.Column="0"/> <Button Content="右下" Grid.Row="1" Grid.Column="1"/> </Grid>

二、StackPanel 容器 —— 顺序排列

StackPanel 会把子元素一个接一个地排列,默认是垂直方向(从上到下)。

  • 设置Orientation="Horizontal"可以改为水平排列(从左到右)
  • 子元素不会自动换行,超出范围就看不到了
<StackPanel Orientation="Vertical"> <Button Content="按钮1"/> <Button Content="按钮2"/> <Button Content="按钮3"/> </StackPanel>

三、WrapPanel 容器 —— 自动换行

WrapPanel 和 StackPanel 类似,也是按顺序排列子元素,默认是水平方向。但它的独特之处在于:空间不够时会自动换行(或换列)。

  • 默认水平排列,放不下了自动换到下一行
  • 设置Orientation="Vertical"则垂直排列,放不下了自动换到下一列
<WrapPanel> <Button Content="标签1"/> <Button Content="标签2"/> <Button Content="标签3"/> <Button Content="标签4"/> </WrapPanel>

四、DockPanel 容器 —— 停靠布局

DockPanel 允许你把子元素停靠到容器的上、下、左、右四个方向,最后一个子元素会自动填满剩余空间。

  • 通过DockPanel.Dock属性指定停靠方向(TopBottomLeftRight
  • 最后一个子元素(或设置LastChildFill="True"时)会占据中间剩余区域
<DockPanel> <Button Content="顶部" DockPanel.Dock="Top"/> <Button Content="左侧" DockPanel.Dock="Left"/> <Button Content="底部" DockPanel.Dock="Bottom"/> <Button Content="中间(自动填满)"/> </DockPanel>

五、UniformGrid 容器 —— 均匀网格

UniformGrid 会把所有子元素放进一个行列大小完全相同的网格中。你只需要指定有几行几列,它会自动均分空间。

  • 通过RowsColumns属性指定行列数
  • 如果只指定其中一个,另一个会自动计算
  • 每个格子的大小完全一样
<UniformGrid Rows="2" Columns="3"> <Button Content="1"/> <Button Content="2"/> <Button Content="3"/> <Button Content="4"/> <Button Content="5"/> <Button Content="6"/> </UniformGrid>

六、Margin 属性 —— 外边距

用来设置元素与周围元素(或容器边缘)之间的间距

它的写法有以下几种:

写法含义
Margin="10"上下左右都是 10
Margin="10,20"左右 10,上下 20
Margin="10,20,30,40"左 10、上 20、右 30、下 40(顺时针)
<Button Content="按钮" Margin="10,5,10,5"/>

对比

容器排列方式核心特点
Grid自定义行列最灵活,适合复杂布局
StackPanel单方向顺序排列简单线性,不换行
WrapPanel顺序排列 + 自动换行空间不足时自动折行
DockPanel上下左右停靠适合经典窗口布局
UniformGrid均匀网格所有格子大小一致

七、对比Grid 中 Row/Column 的三种尺寸单位

在 Grid 容器中,RowDefinitionHeightColumnDefinitionWidth支持三种赋值方式。


固定像素值(如100

直接指定一个固定的像素大小,不管窗口怎么拉伸,这一行/列的大小始终不变

<RowDefinition Height="100"/>
  • 优点:精确可控
  • 缺点:窗口放大缩小时不会自适应,可能导致空间浪费或内容溢出
  • 适用场景:顶部标题栏、底部状态栏等高度固定的区域

Auto(自动适应内容)

行/列的高度或宽度会自动根据内部子元素的大小来调整,子元素多大,它就多大。

<RowDefinition Height="Auto"/>
  • 优点:内容多高就多高,不会浪费空间
  • 缺点:如果内容本身大小不固定,可能导致布局不稳定
  • 适用场景:搜索框、按钮行等"高度由内容决定"的区域

星号*(比例分配剩余空间)

*表示把剩余的空间按比例分配。这是 Grid 最强大也最容易踩坑的地方。

<RowDefinition Height="*"/> <RowDefinition Height="2*"/>

上面的写法表示:

  • 第一行占剩余空间的1 份
  • 第二行占剩余空间的2 份
  • 也就是说,第二行的高度是第一行的2 倍

如果三行都写Height="*",那就是三等分。

  • 优点:窗口拉伸时自动按比例缩放,自适应能力最强
  • 缺点:如果内容超出分配的空间,可能会被截断(需要配合ScrollViewer使用)
  • 适用场景:主内容区域、需要自适应拉伸的布局

实际开发中最常见的写法就是三者结合

单位含义窗口拉伸时
100(固定像素)固定大小不变
Auto由子元素内容撑开随内容变化
*/2*按比例分配剩余空间按比例缩放
http://www.cnnetsun.cn/news/4271322.html

相关文章:

  • 英文Thesis被Turnitin大面积判为AI生成:BunnyScholar长文降AI实测
  • MATLAB偏最小二乘回归(PLS)实战:从原理到代码解决高维共线性问题
  • C++继承与多态实战:从原理到支付系统设计
  • AI编程助手频繁跑偏?模型训练任务的边界设计与工具权限控制指南
  • Spring Authorization Server 1.4.0 使用及详细配置 搭配Spring Boot3.4.0 + Spring Security6.4.1
  • C++ STL核心组件解析:从容器、迭代器到泛型编程实战
  • 边缘推理框架升级的核查
  • 使用 authentik 搭建统一身份认证与 OIDC 单点登录实践
  • 海康工业相机SDK C#开发实战:从示例程序到项目工程化
  • Python SymPy求解方程组:从数学建模到工程实战
  • 软考系统架构设计师论文涉及知识点之Redis(5)
  • AI短剧工业化与网页端数据驱动:拆解短剧出海登顶路径
  • Windows系统文件WiaExtensionHost64.dll丢失找不到问题解决
  • C++ 逗号运算符详解
  • 如何评测LLM优化评估流程?HarnessOpt-Bench思路与实践
  • 2026AI论文工具终极排行榜✅实测无广!本科/硕博/期刊全场景排名
  • BFS算法实战:多源点扩散问题解析与Python实现
  • 强化学习中的奖励结构:如何重塑情景探索与神经记忆的交互
  • 蓝桥杯国赛Java选手五一冲刺:从算法复盘到实战模拟的备赛指南
  • 电力巡检绝缘子缺陷识别数据集:YOLOv5实战落地指南
  • Simulink数学建模:从微分方程到可视化仿真的工程实践
  • 从格式废墟到优雅存档:智谱清言导出Excel背后的技术破局
  • 一文读懂 GEO:定义、价值、服务商选型与效果评估全拆解
  • 本地部署开源大模型:用Ollama搭建AI写作辅助系统实战指南
  • 117、移动机器人与机械臂协同:移动操作中的导航与规划
  • MATLAB信号处理进阶实战:从旋变解码到雷达CFAR检测
  • C++ swap操作深度解析:从基础实现到拷贝交换设计模式
  • 蓝桥杯单片机国赛门禁系统实战:状态机设计与模块驱动详解
  • C#解析达梦dm.ini被GC毛刺卡死?我用ReadOnlySpan手搓零分配解析器,内存直降99%!
  • JS逆向不用头秃:用大模型自动分析混淆代码完整流程