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

WPF学习(2)-UniformGrid控件(均分布局)+StackPanel控件(栈式布局)

UniformGrid控件(均分布局)

UniformGrid和Grid有些相似,只不过UniformGrid的每个单元格面积都是相等的,不管是横向的单元格,或是纵向的单元格,它们会平分整个UniformGrid。

UniformGrid控件提供了3个属性,分别是FirstColumn、Columns 、Rows 。FirstColumn表示第一行要空几个单元格,后面两个属性分别用于设置行数和列数。

1. 默认情况

这是我们没有UniformGrid的属性的效果,它会根据子元素的数量和UniformGrid自身的尺寸来决定行数和列数。

    <UniformGrid><Button Content="1" Margin="2"/><Button Content="2" Margin="2"/><Button Content="3" Margin="2"/><Button Content="4" Margin="2"/></UniformGrid>

在这里插入图片描述

2. 设置参数

设计当前UniformGrid为3行3列,同时设置第一行第一个单元格保持空白。

    <UniformGrid FirstColumn="1" Rows="3" Columns="3"><Button Content="1" Margin="2"/><Button Content="2" Margin="2"/><Button Content="3" Margin="2"/><Button Content="4" Margin="2"/></UniformGrid>

在这里插入图片描述

3. 总结

UniformGrid控件使用非常简单方便,通常用于局部的布局。

StackPanel控件(栈式布局)

StackPanel用于水平或垂直堆叠子元素。也就是说,StackPanel同样也有一个Children属性,而Children集合中的元素呈现在界面上时,只能是按水平或垂直方式布局。

public class StackPanel : Panel, IScrollInfo, IStackMeasure
{public static readonly DependencyProperty OrientationProperty;public StackPanel();public double HorizontalOffset { get; }public double ViewportHeight { get; }public double ViewportWidth { get; }public double ExtentHeight { get; }public double ExtentWidth { get; }public bool CanVerticallyScroll { get; set; }public bool CanHorizontallyScroll { get; set; }public Orientation Orientation { get; set; }public double VerticalOffset { get; }public ScrollViewer ScrollOwner { get; set; }protected internal override Orientation LogicalOrientation { get; }protected internal override bool HasLogicalOrientation { get; }public void LineDown();public void LineLeft();public void LineRight();public void LineUp();public Rect MakeVisible(Visual visual, Rect rectangle);public void MouseWheelDown();public void MouseWheelLeft();public void MouseWheelRight();public void MouseWheelUp();public void PageDown();public void PageLeft();public void PageRight();public void PageUp();public void SetHorizontalOffset(double offset);public void SetVerticalOffset(double offset);protected override Size ArrangeOverride(Size arrangeSize);protected override Size MeasureOverride(Size constraint);}

StackPanel提供了一些属性和方法,最常用的是Orientation枚举属性,用于设置子控件在StackPanel内部的排列方式,分别是水平排列(Horizontal)和垂直排列(Vertical)。默认值是垂直排列(Vertical)。

1. 垂直排列

    <StackPanel Orientation="Vertical"><Button Content="1" Margin="20" /><Button Content="2" Margin="20" /><Button Content="3" Margin="20" /><Button Content="4" Margin="20" /></StackPanel>

在这里插入图片描述

注意:
当StackPanel子元素处于垂直排列时,此时子元素的宽度默认与StakcPanel的宽度保持一致,但是子元素的高度是与其自身的高度自适应显示。

2. 水平排列

    <StackPanel Orientation="Horizontal"><Button Content="1" Margin="20" /><Button Content="2" Margin="20" /><Button Content="3" Margin="20" /><Button Content="4" Margin="20" /></StackPanel>

在这里插入图片描述

注意:
当StackPanel子元素处于水平排列时,此时子元素的高度默认与StakcPanel的高度保持一致,但是子元素的宽度是与其自身的宽度自适应显示。

3. StackPanel控件复杂使用

可以利用子控件的HorizontalAlignment属性或VerticalAlignment来设置子控件在StackPanel内部的显示位置,比如在垂直排列布局模式下,可以设置HorizontalAlignment属性值,Left表示显示在左则,Right显示在右则,Center则居中显示,Stretch表示拉伸填充显示。

需要注意的是,由于WPF的控件布局都是采用自适应计算每个控件的位置,所以在设置了HorizontalAlignment或VerticalAlignment后,子控件的宽度和高度都会重新计算,主要是根据自身内容的尺寸计算。

<ScrollViewer><StackPanel Orientation="Vertical"><Button Content="1" Margin="20" HorizontalAlignment="Left"/><Button Content="2" Margin="20" HorizontalAlignment="Right"/><Button Content="3" Margin="20" HorizontalAlignment="Center"/><Button Content="4" Margin="20" HorizontalAlignment="Stretch"/><Button Content="5" Margin="20" /><Button Content="6" Margin="20" /><Button Content="7" Margin="20" /><Button Content="8" Margin="20" /><Button Content="9" Margin="20" /></StackPanel></ScrollViewer>

在这里插入图片描述
我们可以看到上图中前三行的按钮都是根据自身内容的宽高自适应绘制的。另外,如果StackPanel内部的子控件太多,则需要配合滚动条容器ScrollViewer控件。

http://www.lryc.cn/news/418552.html

相关文章:

  • ANTSDR E310
  • MySQL 5.7 DDL 与 GH-OST 对比分析
  • 【Python】爬取网易新闻今日热点列表数据并导出
  • 软件设计之HTML5
  • CnosDB 元数据集群 – 分布式时序数据库的大脑
  • 白骑士的Matlab教学进阶篇 2.5 Simulink
  • linux安装anaconda
  • python装饰器作用和使用场景
  • Apache Tomcat 7下载、安装、环境变量配置 详细教程
  • SQL注入实例(sqli-labs/less-20)
  • Linux Shell面试题大全及参考答案(3万字长文)
  • 速盾:cdn优化静态资源加载速度机制
  • 04.C++类和对象(中)
  • 【代码随想录训练营第42期 Day23打卡 回溯Part2 - LeetCode 39. 组合总和 40.组合总和II 131.分割回文串
  • 书生.浦江大模型实战训练营——(三)Git基本操作与分支管理
  • 数据可视化Axure大屏原型制作分享
  • Python3安装
  • 基于Python的数据科学系列(4):函数
  • 高频焊接设备配电系统无源滤波系统的设计
  • 模拟退火的
  • 为什么有的地方笔记本经常连不上wifi,而手机可以?
  • 组件化开发
  • java学习--文件
  • k8s—Prometheus+Grafana+Altermaneger构建监控平台
  • Dijkstra算法求解最短路径 自写代码
  • C#如何对某个词在字符串中出现的次数进⾏计数(LINQ)
  • Linux篇之OS层内核参数的调优
  • DLMS/COSEM中的信息安全:安全密钥(上)
  • Taro基础知识学习
  • 浮点型在内存中的存储