WPF布局控件(界面骨架核心)

布局控件(界面骨架核心)

1.1 Grid(最常用:复杂布局)

  • 核心场景:表单、多区域划分(如 "顶部标题 + 中间内容 + 底部按钮")

  • 必记属性:

    • RowDefinitions/ColumnDefinitions:行 / 列定义(*表示占剩余空间,Auto自适应)

    • Grid.Row/Grid.Column:子元素指定行 / 列

  • 避坑点 :不设置Width/Height时,默认撑满父容器;行 / 列未设置Height/Width时,默认Auto

  • 极简示例(直接复制):

    复制代码
    <Grid Width="400" Height="300">
      <!-- 2行2列:第1行高50,第2行占剩余;第1列宽100,第2列占剩余 -->
      <Grid.RowDefinitions>
        <RowDefinition Height="50"/>
        <RowDefinition Height="*"/>
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="100"/>
        <ColumnDefinition Width="*"/>
      </Grid.ColumnDefinitions>
      <!-- 子元素:标题(跨2列)、标签、输入框 -->
      <TextBlock Text="用户表单" Grid.Row="0" Grid.ColumnSpan="2" HorizontalAlignment="Center"/>
      <Label Content="姓名:" Grid.Row="1" Grid.Column="0"/>
      <TextBox Grid.Row="1" Grid.Column="1" Width="200"/>
    </Grid>
  • 实战备注 :用Grid.ColumnSpan/Grid.RowSpan实现跨列 / 跨行,适合复杂表单布局

效果展示:

1.2 StackPanel(线性排列)

  • 核心场景:按钮组、简单列表(如 "确定 + 取消" 按钮横向排列)

  • 必记属性:

    • Orientation:排列方向(Horizontal横向 /Vertical纵向,默认纵向)

    • Spacing(.NET 5+):子元素间距(避免用Margin逐个设置)

  • 避坑点:纵向排列时,子元素默认撑满宽度;横向排列时,默认撑满高度

  • 极简示例:

    复制代码
    <!-- 横向按钮组,间距10 -->
    <StackPanel Orientation="Horizontal" Margin="20">
      <Button Content="确定" Width="80"/>
      <Button Content="取消" Width="80"/>
      <Button Content="重置" Width="80"/>
    </StackPanel>

效果展示:

1.3 ScrollViewer(滚动容器)

  • 核心场景:内容超出容器(如长文本、多选项列表)

  • 必记属性:

    • VerticalScrollBarVisibility:垂直滚动条(Auto自动显示 /Visible始终显示 /Hidden隐藏)

    • HorizontalScrollBarVisibility:水平滚动条

  • 避坑点 :必须设置Width/Height,否则会撑满父容器,滚动条不生效

  • 极简示例:

    复制代码
    <ScrollViewer Width="300" Height="200" VerticalScrollBarVisibility="Auto">
      <StackPanel>
        <TextBlock Text="第1行内容" Margin="5"/>
        <TextBlock Text="第2行内容" Margin="5"/>
        <TextBlock Text="第3行内容" Margin="5"/>
        <!-- 省略N行... -->
        <TextBlock Text="第20行内容" Margin="5"/>
      </StackPanel>
    </ScrollViewer>

效果展示:

1.4 WrapPanel(自动换行)

  • 核心场景:动态数量元素(如标签云、图片墙)

  • 必记属性:

    • Orientation:排列方向(默认横向,排满换行)

    • ItemWidth/ItemHeight:子元素统一尺寸(避免大小不一)

  • 避坑点:父容器需有固定宽度(横向排列)或高度(纵向排列),否则不会换行

  • 极简示例:

    复制代码
    <!-- 横向排列,子元素宽80,排满换行 -->
    <WrapPanel Width="300" Orientation="Horizontal" ItemWidth="80" Margin="10">
      <Button Content="标签1"/>
      <Button Content="标签2"/>
      <Button Content="标签3"/>
      <Button Content="标签4"/>
      <Button Content="标签5"/>
    </WrapPanel>

效果展示:

1.5 Canvas(绝对定位)

  • 核心场景:自定义图形、固定位置元素(如仪表盘、流程图)

  • 必记属性 :子元素用Canvas.Left/Canvas.Top/Canvas.Right/Canvas.Bottom定位

  • 避坑点:不自动适配父容器大小,分辨率变化时元素位置会偏移,慎用在响应式界面

  • 极简示例:

    复制代码
    <Canvas Width="300" Height="200" Background="LightGray">
      <!-- 圆(左上角定位) -->
      <Ellipse Width="50" Height="50" Fill="Red" Canvas.Left="20" Canvas.Top="20"/>
      <!-- 文本(右下角定位) -->
      <TextBlock Text="绝对定位" Canvas.Right="20" Canvas.Bottom="20"/>
    </Canvas>

效果展示:

1.6 DockPanel(边缘停靠)

  • 核心场景:工具栏 + 内容区(如 "顶部工具栏 + 中间内容 + 底部状态栏")

  • 必记属性:

    • LastChildFill:最后一个子元素是否占满剩余空间(默认True)

    • DockPanel.Dock:子元素停靠方向(Top/Bottom/Left/Right)

  • 避坑点 :子元素停靠顺序影响布局,建议先停靠Top/Bottom,再停靠Left/Right

  • 极简示例:

    复制代码
    <DockPanel LastChildFill="True" Width="400" Height="300">
      <!-- 顶部工具栏 -->
      <ToolBar DockPanel.Dock="Top">
        <Button Content="剪切"/>
        <Button Content="复制"/>
      </ToolBar>
      <!-- 左侧列表 -->
      <ListBox Width="100" DockPanel.Dock="Left"/>
      <!-- 中间内容(占剩余空间) -->
      <TextBlock Text="主内容区" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </DockPanel>

效果展示:

1.7 其他高频布局控件(简表)

控件 核心场景 必记属性 极简示例
GridSplitter 调整 Grid 行 / 列大小 ResizeDirection(Columns/Rows) <GridSplitter Width="5" Background="Gray" ResizeDirection="Columns"/>
GroupBox 控件分组(带标题) Header(分组标题) <GroupBox Header="登录信息"><TextBox/></GroupBox>
Viewbox 自动缩放子元素(保持比例) Stretch(Uniform自适应比例) <Viewbox Width="200"><Button Content="缩放按钮"/></Viewbox>
VirtualizingStackPanel 大量数据列表(优化性能) VirtualizingPanel.IsVirtualizing="True" <ListBox.ItemsPanel><ItemsPanelTemplate><VirtualizingStackPanel/></ItemsPanelTemplate></ListBox.ItemsPanel>
Expander 折叠 / 展开内容(省空间) Header(标题)、IsExpanded <Expander Header="高级设置"><CheckBox/></Expander>
相关推荐
小熊恋旧9 小时前
Python 面向对象编程:方法、属性、继承与多态详解
开发语言·python
云边云科技_云网融合9 小时前
面向汽车零部件制造业场景的解决方案 | 70 秒:一台车下线的时间里,藏着五张网
开发语言·汽车·php
Evand J9 小时前
【PMSM滤波例程2】PMSM未知负载转矩观测EKF。MATLAB例程(负载增广EKF与实际仿真结果)。附下载链接
开发语言·matlab·电机
will_net9 小时前
apollo 站点部署&C#接入
开发语言·c#·apollo
晗夜未央10 小时前
任务队列反复失败,先分清重试、阻塞和结果待核对
开发语言·javascript
熊猫钓鱼>_>10 小时前
四种书签,一条时间线:一个读书 App 的记忆颗粒与它的边界案例【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙pc
努力努力再努力wz11 小时前
【Lua 入门系列】Lua 函数深入理解:函数对象、多返回值、可变参数、闭包、递归与尾调用优化
开发语言·lua
飞浪纪元[FWC–FE]11 小时前
从零到一键绿:Qt 5.14.2 + VS2019 开发环境搭建、Kit 套件配置与构建错误修复完全手册
开发语言·qt
Wang's Blog11 小时前
Java 项目实战:交友项目 - 联系人列表
java·开发语言·交友
我命由我1234511 小时前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理