WPF篇(3)- WrapPanel控件(瀑布流布局)+DockPanel控件(停靠布局)

news2024/9/19 21:43:58

WrapPanel控件(瀑布流布局)

WrapPanel控件表示将其子控件从左到右的顺序排列,如果第一行显示不了,则自动换至第二行,继续显示剩余的子控件。我们来看看它的结构定义:

	public class WrapPanel : Panel
{
    public static readonly DependencyProperty ItemWidthProperty;
    public static readonly DependencyProperty ItemHeightProperty;
    public static readonly DependencyProperty OrientationProperty;
 
    public WrapPanel();
 
    public double ItemWidth { get; set; }
    public double ItemHeight { get; set; }
    public Orientation Orientation { get; set; }
 
    protected override Size ArrangeOverride(Size finalSize);
    protected override Size MeasureOverride(Size constraint);
 
}

提供了3个属性,分别是Orientation代表子控件的排列方向,ItemWidth代表子控件的(最大)宽度,ItemHeight代表子控件的(最大)高度。默认的排列方向是水平方向。

1. 水平排列

    <WrapPanel Orientation="Horizontal">
        <Button Content="1" Margin="5" HorizontalAlignment="Left"/>
        <Button Content="2" Margin="5" HorizontalAlignment="Right"/>
        <Button Content="3" Margin="5" HorizontalAlignment="Center"/>
        <Button Content="4" Margin="5" HorizontalAlignment="Stretch"/>
        <Button Content="5" Margin="5" />
        <Button Content="6" Margin="5" />
        <Button Content="7" Margin="5" />
        <Button Content="8" Margin="5" />
        <Button Content="9" Margin="5" />
        <Button Content="10" Margin="5" />
    </WrapPanel>

在这里插入图片描述
注意:
WrapPanel的子元素的高度和宽度都是根据子元素自身内容的尺寸呈现。另外,当WrapPanel处于水平排列时,子元素的HorizontalAlignment是不起作用的。

2. 垂直排列

 <WrapPanel Orientation="Vertical">
        <Button Content="1" Margin="5" HorizontalAlignment="Left"/>
        <Button Content="2" Margin="5" HorizontalAlignment="Right"/>
        <Button Content="3" Margin="5" HorizontalAlignment="Center"/>
        <Button Content="4" Margin="5" HorizontalAlignment="Stretch"/>
        <Button Content="5" Margin="5" />
        <Button Content="6" Margin="5" />
        <Button Content="7" Margin="5" />
        <Button Content="8" Margin="5" />
        <Button Content="9" Margin="5" />
        <Button Content="10" Margin="5" />
        <Button Content="12" Margin="5" />
        <Button Content="13" Margin="5" />
        <Button Content="14" Margin="5" />
        <Button Content="15" Margin="5" />
        <Button Content="16" Margin="5" />
        <Button Content="17" Margin="5" />
        <Button Content="18" Margin="5" />
        <Button Content="19" Margin="5" />
        <Button Content="20" Margin="5" />
    </WrapPanel>

在这里插入图片描述
这里我们放了20个button在WrapPanel控件中,并设置Orientation属性为Vertical(垂直排列),此时,请观察前面3个按钮的HorizontalAlignment状态,可以很清晰的看到,第一个按钮居左显示,第二个按钮居右显示,第三个按钮居中显示,说明在Vertical垂直排列下,子元素的水平状态才会生效,反之亦然。

3. 指定子元素宽高

    <WrapPanel Orientation="Horizontal" ItemWidth="80" ItemHeight="80">
        <Button Content="1" Margin="5" HorizontalAlignment="Left"/>
        <Button Content="2" Margin="5" HorizontalAlignment="Right"/>
        <Button Content="3" Margin="5" HorizontalAlignment="Center"/>
        <Button Content="4" Margin="5" HorizontalAlignment="Stretch"/>
        <Button Content="5" Margin="5" />
        <Button Content="6" Margin="5" />
        <Button Content="7" Margin="5" />
        <Button Content="8" Margin="5" />
        <Button Content="9" Margin="5" />
        <Button Content="10" Margin="5" />
    </WrapPanel>

在这里插入图片描述

DockPanel控件(停靠布局)

官方解释,定义一个区域,从中可以按相对位置水平或垂直排列各个子元素,先看下它的结构:

public class DockPanel : Panel
{
    public static readonly DependencyProperty LastChildFillProperty;
    public static readonly DependencyProperty DockProperty;
 
    public DockPanel();
 
    public bool LastChildFill { get; set; }
 
    public static Dock GetDock(UIElement element);
    public static void SetDock(UIElement element, Dock dock);
    protected override Size ArrangeOverride(Size arrangeSize);
    protected override Size MeasureOverride(Size constraint);
 
}

DockPanel提供了一个LastChildFill 属性,用来指示最后一个子元素是否填满剩余的空间。其次,它还提供了一个枚举依赖属性,叫Dock。这个属性是附加到子元素身上的,用来指示子元素在DockPanel显示停靠方位,其值分为Left,Right,Top,Bottom。

DockPanel因为继承了FrameworkElement基类,所以还可以使用FrameworkElement基类的HorizontalAlignment(水平对齐)和VerticalAlignment(垂直对齐)两个属性,用来设置子元素的排列方式。

1. 经典布局

    <DockPanel>
        <Button DockPanel.Dock="Left" Content="1" Margin="5" />
        <Button DockPanel.Dock="Top" Content="2" Margin="5" />
        <Button DockPanel.Dock="Right" Content="3" Margin="5" />
        <Button DockPanel.Dock="Bottom" Content="4" Margin="5" />
        <Button  Content="5" Margin="5" />
    </DockPanel>

在这里插入图片描述
这是DockPanel最经典的布局方式,上下左右都停靠一个控件,中间剩余的空间,全部由最后一个控件填满。

2. 水平布局

    <DockPanel LastChildFill="False" HorizontalAlignment="Center">
        <Button Content="1" Margin="5" />
        <Button Content="2" Margin="5" />
        <Button Content="3" Margin="5" />
        <Button Content="4" Margin="5" />
        <Button Content="5" Margin="5" />
    </DockPanel>

在这里插入图片描述
我们只需要设置LastChildFill为False,并设置HorizontalAlignment属性,并再指定子控件的停靠方向。

或者

    <DockPanel LastChildFill="False" VerticalAlignment="Top">
        <Button Content="1" Margin="5"/>
        <Button Content="2" Margin="5"/>
        <Button Content="3" Margin="5"/>
        <Button Content="4" Margin="5"/>
        <Button Content="5" Margin="5"/>
    </DockPanel>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1995785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rocketMQ5.0事务消息实战

事务消息逻辑 首先我们来docker 部署rocketMQ与rocketMQDashBoard docker ps查看rocketMQ 容器名称 docker ps 进入容器内部 docker exec -it rmqnamesrv /bin/bash 创建事务消息 sh mqadmin updateTopic -c DefaultCluster -t TRANSACTIONTopic -n 127.0.0.1:9876 -a mes…

Python开源项目月排行 2024年7月

#2024年7月2024年8月2日1the-art-of-command-line一个全面而简洁的命令行使用指南。它旨在帮助工程师提高在命令行环境下的熟练程度和生产力。项目涵盖了从基础到高级的各种命令行技巧和知识&#xff0c;项目的内容涵盖了基础知识、日常使用、文件处理、系统调试等多个方面&…

图像自动化保存工具:Python脚本开发指南

引言 在数字化时代&#xff0c;图像已成为信息传递的重要媒介。无论是社交媒体、新闻网站还是电子商务平台&#xff0c;图像的自动化处理和保存都是提升用户体验和工作效率的关键。本文将深入探讨如何使用Python脚本实现从百度图片等搜索引擎批量下载并保存图像文件的高级应用…

第36集《大佛顶首楞严经》

请大家打开讲义第八十页&#xff0c;子三&#xff0c;明鼻识界即藏性。 蕅益大师讲到&#xff0c;我们修学大乘佛法&#xff0c;有一句话是很重要的。他说&#xff1a;“未开圆解&#xff0c;不应辄论修证。”说一个菩萨你没有真正地大彻大悟开圆顿解&#xff0c;你没有资格谈…

K8s问题案例分析

1.worker节点宕机&#xff0c;请说明一下pod的驱逐流程&#xff1a; k8s有一个节点控制器&#xff0c;节点控制器在一段时间内无法和kubelet通信&#xff0c;那么就会给节点打上unknown 状态&#xff0c;并自动创建NoExecute污点,避免调度器调度新的pod到该节点。同时已经在这…

2024年6月scratch图形化编程等级考试三级真题

202406 青少年软件编程等级考试Scratch三级真题 试卷总分数&#xff1a;100分 考试时长&#xff1a;60 分钟 第 1 题 运行程序后&#xff0c;角色的x坐标是&#xff1f;&#xff08; &#xff09; A&#xff1a;99 B&#xff1a;100 C&#xff1a;199 D&#xff1a;200 正…

Shell 脚本中的循环语句、函数与数组

文章目录 Shell 脚本中的循环语句、函数与数组1. for 循环1.1 for 循环语法结构1.1.1 列表循环1.1.2 不带列表循环1.1.3 类C风格的for循环 1.2 案例1.2.1 打印1-5这5个数字1.2.2 打印5次hello world1.2.3 打印abcde1.2.4 输出0-50之间的偶数 1.3 小技巧&#xff1a;花括号 {} 和…

力扣爆刷第171天之TOP200五连刷121-125(跳跃游戏、买卖股票、旋转链表)

力扣爆刷第171天之TOP200五连刷121-125&#xff08;跳跃游戏、买卖股票、旋转链表&#xff09; 文章目录 力扣爆刷第171天之TOP200五连刷121-125&#xff08;跳跃游戏、买卖股票、旋转链表&#xff09;一、55. 跳跃游戏二、123. 买卖股票的最佳时机 III三、排序奇升偶降链表四、…

【mysql 第四篇章】bin log 的作用是啥呢?

一、redo Log 介绍 redo log 是一种偏向物理性质的重做日志&#xff0c;因为他里面记录类似的这样的东西&#xff0c;“对那个数据也中的什么记录&#xff0c;做了个什么修改”。它是 InnoDB 存储引擎特有的东西。 二、bin Log 日志 bin log 叫做归档日志&#xff0c;它里面…

pytorch多GPU训练简明教程

1. Torch 的两种并行化模型封装 1.1 DataParallel DataParallel 是 PyTorch 提供的一种数据并行方法&#xff0c;用于在单台机器上的多个 GPU 上进行模型训练。它通过将输入数据划分成多个子部分&#xff08;mini-batches&#xff09;&#xff0c;并将这些子部分分配给不同的 G…

软件测试面试200问(含答案+文档)

1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自己&…

旋转图像

旋转图像 思路&#xff1a; 第一意识是找一个数学规律&#xff0c;一个公式可以找到对应的位置。 唉 想不出 没啥思路 看题解了。 一看就懂了 规律就是。。。。。。&#xff1a;原来第 i 行第 j 列的元素 在旋转后 会在第 j 行倒数第i列。 这种题目做少了&#xff0c;多做…

正点原子安装buildroot构建根文件系统

1&#xff1a;何为 buildroot&#xff1f; 1.1&#xff1a;buildroot 简介 在《第三篇 系统移植篇》我们最后讲解了如何使用 busybox 构建文件系统&#xff0c;busybox 仅仅 只是帮我们构建好了一些常用的命令和文件&#xff0c;像 lib 库、/etc 目录下的一些文件都需要我们自…

初识Spring、SpringIOC

Spring 一、什么是Spring框架&#xff1f;(重要) ---对Spring的理解 记忆关键字&#xff1a;1.核心思想&#xff08;IOC、AOP&#xff09; 2.作用&#xff08;解耦、简化&#xff09; 3.简单描述框架组成 答&#xff1a;定义&#xff1a;Spring是一个轻量级的控制反转(IoC)和…

SpringBoot中解决文件application.properties中文注释乱码的问题

如图看到中文注释乱码 很影响代码的阅读 原因是字符编码使用了ISO-8859-1 这里演示如何在idea里面把ISO-8859-1改为UTF-8 点击右上角设置 搜索框输入UTF-8 把默认的改成UTF-8就行了 可以看到中文注释正常显示 希望能够点点赞和收藏&#xff01;&#xff01;

猫咪浮毛大作战!希喂、安德迈宠物空气净化器PK,实测数据大公开

宠物空气净化器作为宠物领域的新产品&#xff0c;凭借自身独特的功能受到铲屎官们的喜爱&#xff0c;越来越多的商家关注到这个市场。然而&#xff0c;市面上品牌逐渐增多&#xff0c;质量却参差不齐&#xff0c;一些不良商家以次充好&#xff0c;容易让消费者陷入消费陷阱。因…

PHYS_OPT_MODIFIED

当对原始单元执行物理优化时&#xff0c;PHYS_OPT_MODIFIED 更新单元的属性以反映对单元执行的优化。什么时候&#xff1f; 对同一单元格执行多次优化&#xff0c;PHYS_OPT_MODIFIED值 包含按发生顺序排列的优化列表。 架构支持 所有架构。 适用对象 PHYS_OPT_MODIFIED属性放置…

Linux嵌入式学习——C++学习(2)

一、标识符的作用域和可见性 &#xff08;一&#xff09;作用域 1、全局作用域 在函数外部声明的变量和函数具有全局作用域。这些变量和函数在程序的任何地方都可以被访问。 2.局部作用域 在函数内部、循环体内部或条件语句内部声明的变量具有局部作用域。这些变量只能在其…

<数据集>航拍屋顶识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;3516张 标注数量(xml文件个数)&#xff1a;3516 标注数量(txt文件个数)&#xff1a;3516 标注类别数&#xff1a;1 标注类别名称&#xff1a;[roof] 序号类别名称图片数框数1roof351643938 使用标注工具&#xf…

模具3D打印:成本缩减与产能提升的新引擎

近年来&#xff0c;3D打印技术&#xff0c;特别是在航空航天、汽车制造、生物医疗等前沿领域&#xff0c;已成为复杂结构件研发与生产的关键技术。针对广大制造企业而言&#xff0c;评估金属3D打印技术的经济效能&#xff0c;即其能否有效助力企业成本控制与产能提升&#xff0…