WPF 布局整理

WPF 布局的核心机制
WPF 布局基于布局面板(Panel) 和 测量/排列(Measure/Arrange) 机制:

测量(Measure):计算子元素所需的空间。
排列(Arrange):确定子元素最终的位置和大小。
自动适应:大多数布局控件支持动态调整子元素的位置和大小(基于内容或容器尺寸)
简单方案:直接拖拽。

详细参考:布局

 

常用布局控件详解
Grid(网格布局)
核心功能:通过行(RowDefinition)和列(ColumnDefinition)定义网格,支持复杂的多区域布局。
关键属性:
RowDefinitions/ColumnDefinitions:定义行和列(支持固定值、比例(*)、自动尺寸(Auto))。
Grid.Row/Grid.Column:附加属性,设置子元素的位置。
Grid.RowSpan/Grid.ColumnSpan:合并单元格

 

StackPanel(堆叠布局)
  1. 核心功能:子元素按水平(Orientation=“Horizontal”)或垂直(Orientation=“Vertical”)方向依次排列。
  2. 适用场景:简单线性布局(如工具栏、菜单栏)
DockPanel(停靠布局)
    1. 核心功能:子元素通过 DockPanel.Dock 附加属性停靠在容器的边缘。
    2. 关键属性:
      LastChildFill:最后一个子元素是否填充剩余空间(默认 True)
WrapPanel(自动换行布局)
  1. 核心功能:子元素按顺序排列,空间不足时自动换行。
  2. 适用场景:标签页、动态生成的内容列表
 
Canvas(绝对定位布局)
  1. 核心功能:通过 Canvas.Left、Canvas.Top 等附加属性直接指定子元素的坐标。
  2. 适用场景:需要精确控制位置的场景(如绘图、游戏界面)

 

UniformGrid(均布网格)
UniformGrid 的核心概念
UniformGrid 是 WPF 中的一种特殊布局控件,所有子元素会被均匀分配到相同大小的单元格中,且每个单元格的尺寸一致。它适用于需要等分空间的场景(如棋盘、按钮矩阵、图片缩略图等)

关键属性详解
Rows 和 Columns
作用:手动指定行数和列数。若未设置,根据子元素数量和容器尺寸自动计算。
自动计算规则:
优先填满行(类似 Horizontal 方向的 WrapPanel)。
行数 = ⌈子元素总数 / 列数⌉,列数 = ⌈子元素总数 / 行数⌉(取决于宽高比例)。
FirstColumn
作用:设置第一行的起始列(默认为0)。例如,若 FirstColumn=2,则第一行的第一个元素从第3列开始放置。
UniformGrid.RowSpan 和 UniformGrid.ColumnSpan

VirtualizingStackPanel 虚拟化技术
什么是虚拟化技术
WPF 中一种特殊的布局容器,专为大数据量列表控件​​(如 ListBox、ListView、DataGrid)设计,通过 ​​虚拟化技术(Virtualization)​​ 优化性能。其核心思想是:​​仅渲染当前可视区域的子元素​​,而非一次性加载所有数据项,从而大幅减少内存占用和渲染开销
说白了就是相当于分页一样只展示分页内容 而不是全部内容
虚拟化的工作机制​​
​​可视区域计算​​
根据容器大小和滚动条位置,计算当前需要显示的数据范围(如索引 0~19)。
​​动态生成 UI​​
仅为可视范围内的数据项生成 UI 元素,其余项保持为 ​​逻辑占位符​​。
​​滚动时复用​​
当用户滚动列表时:
移除移出可视区域的 UI 元素。
将新进入可视区域的数据绑定到复用的 UI 元素上(避免重复创建)
————————————————

布局设计原则
1、先整体后局部
整体框架:用 Grid 划分界面的大区域(如顶部导航栏、侧边栏、主内容区)。
局部细节:在 Grid 的单元格内嵌套其他布局控件(如 StackPanel、UniformGrid)处理子元素排列。

2、避免过度嵌套
性能优化:嵌套层级越深,布局计算越复杂,尽量保持层级扁平。
可维护性:嵌套过多会降低代码可读性,优先用 Grid 的行列定义替代多层 StackPanel。

3、善用布局特性
自动尺寸:利用 Auto(根据内容自适应)和 *(按比例分配剩余空间)优化布局。
内容驱动:优先让子元素决定自身大小(如 WrapPanel 自动换行、StackPanel 线性排列)

 

原文参考:https://blog.csdn.net/Marzlam/article/details/147111635 

 

更多:

WPF 控件使用整理-Control

WPF 资源样式使用整理

WPF RichTextBox滚动条自动滚动实例、文本自动滚动实例

 

posted @ 2025-06-14 15:58  天马3798  阅读(116)  评论(0)    收藏  举报