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

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

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>

在这里插入图片描述

相关文章:

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

WrapPanel控件&#xff08;瀑布流布局&#xff09; WrapPanel控件表示将其子控件从左到右的顺序排列&#xff0c;如果第一行显示不了&#xff0c;则自动换至第二行&#xff0c;继续显示剩余的子控件。我们来看看它的结构定义&#xff1a; public class WrapPanel : Panel {pub…...

【python】Python中实现定时任务常见的几种方式原理分析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

老公请喝茶,2024年老婆必送老公的养生茶,暖暖的很贴心

在这个快节奏的时代&#xff0c;每个人都在为生活奔波&#xff0c;而家的温馨与关怀&#xff0c;成了我们最坚实的后盾。随着2024年的已经过半&#xff0c;作为妻子&#xff0c;你是否也在寻找一份特别的礼物&#xff0c;来表达对老公深深的爱意与关怀&#xff1f;在这个充满爱…...

3d打印相关资料

模型库 拓竹makerworld爱给...

MySQL1 DDL语言

安装与配置 官网&#xff1a; MySQL :: Download MySQL Installer 阿里云&#xff1a; MySQL8 https://www.alipan.com/s/auhN4pTqpRp 点击链接保存&#xff0c;或者复制本段内容&#xff0c;打开「阿里云盘」APP &#xff0c;无需下载极速在线查看&#xff0c;视频原画倍速…...

el-tree懒加载状态下实现搜索筛选(纯前端)

1.效果图 &#xff08;1&#xff09;初始状态 &#xff08;2&#xff09;筛选后 2.代码 <template><div><el-inputplaceholder"输入关键字进行过滤"v-model"filterText"input"searchValue"></el-input><el-tree…...

NLP——Transfromer 架构详解

Transformer总体架构图 输入部分&#xff1a;源文本嵌入层及其位置编码器、目标文本嵌入层及其位置编码器 编码器部分 由N个编码器层堆叠而成 每个编码器层由两个子层连接结构组成 第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接 第二个子层连接结构包…...

大模型算法面试题(二十)

本系列收纳各种大模型面试题及答案。 1、描述Encoder和Decoder中Attention机制的不同之处 Encoder和Decoder中的Attention机制在自然语言处理&#xff08;NLP&#xff09;和序列到序列&#xff08;Seq2Seq&#xff09;模型中扮演着重要角色&#xff0c;它们虽然都利用了Attent…...

2024最新最全面的Selenium 3.0 + Python自动化测试框架

文档说明 Selenium是一个用于Web应用程序自动化测试的工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。 Selenium测试的主要功能包括&#xff1a; 测试与浏览器的兼容性&#xff1a;测试应用程序是否能很好的工作在不同的浏览器和操作系统之上。…...

海运中的甩柜是怎么回事❓怎么才能避免❓

什么是甩柜&#xff1f; 甩柜又叫甩箱&#xff0c;是指集装箱船在起运离港时&#xff0c;船公司没有将此前计划装船的集装箱装运上船&#xff0c;导致部分货物滞留港口。多出现在海运旺季。 为什么会甩柜&#xff1f; 甩箱是集装箱物流中常见的事件&#xff0c;主要因为承运…...

Win11+docker+gpu+vscode+pytorch配置anomalib(2)

在上一篇文章中,我在Win11上通过Docker配置了pytorch,并顺利调用了GPU。在这篇文章中,我将继续完成anomalib的配置。 anomalib是一个非常完善的异常检测框架,我希望通过它来学习经典异常检测算法,并且测试这些算法在我自己的数据集上的效果。 步骤如下: 1. 从docker Hub上…...

AI在招聘市场趋势分析中的应用

一、引言 在数字化、智能化的时代背景下&#xff0c;人工智能&#xff08;AI&#xff09;技术正逐步渗透到各行各业&#xff0c;其中招聘市场也不例外。AI技术的运用不仅极大地提高了招聘的效率和精准度&#xff0c;还在招聘市场趋势分析方面展现出巨大的潜力。本文旨在探讨AI在…...

AMEYA360:太阳诱电应对 165℃的叠层金属类功率电感器实现商品化!

太阳诱电株式会社实现了可以满足车载被动部件认定的可靠性试验规格“AEC-Q200”的叠层金属类功率电感器 MCOIL™“LACNF2012KKTR24MAB”(2.0x1.25x1.0mm&#xff0c;高度为最大值)等 4 个产品的商品化。通过本公司独有的金属类材料和叠层工艺的提高&#xff0c;在叠层金属类功率…...

Nginx进阶-常见配置(三)

nginx 变量 Nginx的配置文件使用的语法的就是一门微型的编程语言。既然是编程语言&#xff0c;一般也就少不了“变量”这种东西。 Nginx配置文件使用的语法主要包括以下几个方面&#xff1a; &#xff08;1&#xff09;配置块 (Block Directives): Nginx配置文件由多个嵌套的…...

开源协作式书签管理器推荐

不知道有没有人和我一样&#xff0c;不怎么爱用app&#xff0c;反而喜欢保留用古老的浏览器浏览新闻和知识的习惯。那么归档网页和书签一定是你非常头疼的事情。 推荐一款开源软件&#xff1a;Linkwarden ,这是一款独立的开源协作式书签管理器。 Linkwarden 允许用户收集、组…...

【线性代数】【二】2.2极大线性无关组与向量空间的基

文章目录 前言一、极大线性无关组二、向量空间的基三、向量维数与向量空间维数总结 前言 上一篇中我们介绍了向量空间的概念&#xff0c;并且学习了对任意给出的一组向量&#xff0c;如果构造一个向量空间。本文将更加细致的去分析张成一个向量空间&#xff0c;具有哪些性质。…...

STM32常见的下载方式有三种

经过对比&#xff0c;推荐使用 SWD下载&#xff0c;只需要一个仿真器&#xff08;如jLINK、ST LINK、 CMSIS DAP 等&#xff09;&#xff0c;比较方便。 不推荐使用串口下载&#xff08;速度慢、无法仿真和调试&#xff09;和 JTAG 下载&#xff08;占用 IO 多&#xff09;。...

RK3568-npu模型转换推理

1. rknn-toolkit2-1.4.0进行模型转换和模型推理 1.1 虚拟机转换和模拟器推理(要求ubuntu18+python3.6) sudo apt-get install python3 python3-dev python3-pip sudo apt-get install libxslt1-dev zlib1g-dev libglib2.0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc cd ~…...

《C语言程序设计 第4版》笔记和代码 第十二章 数据体和数据结构基础

12.1从基本数据类型到抽象数据类型 1 所有的程序设计语言都不能将所有复杂数据对象作为其基本数据类型&#xff0c;因此需要允许用户自定义数据类型&#xff0c;在C语言中&#xff0c;就存在构造数据类型&#xff08;复合数据类型&#xff09;。 2 结构体是构造数据类型的一种…...

学习记录——day26 进程间的通信 无名管道 无名管道 信号通信 特殊的信号处理

目录 一、进程间通信引入 二、无名管道 1、无名管道相关概念 2、无名管道的API接口函数 pipe(int pipefd[2]); 3、管道通信的特点 4、管道的读写特点 三、有名管道 1、有名管道&#xff1a;有名字的管道文件&#xff0c;其他进程可以调用 2、可以用于亲缘进程间的通信&…...

零代码部署GEMMA-3像素工作站:复古界面下的多模态AI体验

零代码部署GEMMA-3像素工作站&#xff1a;复古界面下的多模态AI体验 1. 开篇&#xff1a;当JRPG美学遇上多模态AI 想象一下&#xff0c;90年代经典日式角色扮演游戏的像素风格界面&#xff0c;与现代最先进的多模态AI技术完美融合——这就是GEMMA-3像素工作站带给我们的独特体…...

Janus-Pro-7B开源大模型教程:HuggingFace模型路径本地加载实操

Janus-Pro-7B开源大模型教程&#xff1a;HuggingFace模型路径本地加载实操 1. 引言 如果你正在寻找一个既能看懂图片&#xff0c;又能根据文字生成图片的AI模型&#xff0c;那么Janus-Pro-7B绝对值得你花时间了解一下。这个模型最近在开源社区里挺火的&#xff0c;因为它把“…...

MacBook安装OpenClaw实录:M1芯片适配Qwen3-32B镜像的解决方案

MacBook安装OpenClaw实录&#xff1a;M1芯片适配Qwen3-32B镜像的解决方案 1. 为什么要在M1 MacBook上折腾OpenClaw&#xff1f; 作为一个长期使用MacBook Pro&#xff08;M1芯片&#xff09;的技术爱好者&#xff0c;我一直在寻找能够充分利用本地计算资源的AI工具。当我第一…...

单片机串口通信原理与应用详解

单片机串口通信技术详解1. 串口通信基础概念1.1 串行通信原理串行通信是一种仅使用一根接收线(RX)和一根发送线(TX)进行数据传输的通信方式。与并行通信相比&#xff0c;虽然传输速度较慢&#xff0c;但具有布线简单、成本低的优势。典型的串口通信系统包含三根基本信号线&…...

保姆级教程:用Java SpringBoot实现钉钉机器人自动回复@消息(附完整源码)

企业级钉钉机器人开发实战&#xff1a;SpringBoot实现智能消息处理 最近在帮一家电商公司搭建内部工单系统时&#xff0c;遇到了一个典型需求&#xff1a;当员工在钉钉群里机器人提交问题时&#xff0c;需要自动识别用户身份并回复处理进度。这个看似简单的功能&#xff0c;在…...

如何实现智能文档格式转换:Word到Markdown的高效解决方案

如何实现智能文档格式转换&#xff1a;Word到Markdown的高效解决方案 【免费下载链接】word-to-markdown A ruby gem to liberate content from Microsoft Word documents 项目地址: https://gitcode.com/gh_mirrors/wo/word-to-markdown 还在为文档格式转换的技术难题而…...

告别手动复制!Mac版PowerPoint备注导出神器:自定义AppleScript脚本全解析

Mac版PowerPoint备注导出神器&#xff1a;AppleScript脚本开发实战指南 每次在会议前整理PPT备注时&#xff0c;你是否也厌倦了手动复制粘贴的繁琐操作&#xff1f;作为一位长期使用Mac和PowerPoint的资深用户&#xff0c;我深刻理解这种效率低下的痛苦。本文将带你深入探索如何…...

SAP PP MRP再计划配置详解:从工厂日历到容差设置,手把手教你避开计划混乱

SAP PP MRP再计划配置实战指南&#xff1a;精准控制生产排程的关键参数 在制造业的日常运营中&#xff0c;生产计划的有效性直接关系到交付准时率和库存周转效率。作为SAP PP模块的核心功能之一&#xff0c;MRP&#xff08;物料需求计划&#xff09;的再计划机制扮演着"计…...

LCDGraph:基于字符屏CGRAM的嵌入式轻量级实时绘图库

1. 项目概述LCDGraph 是一款专为嵌入式系统设计的轻量级图形绘制库&#xff0c;面向资源受限的微控制器平台&#xff08;如 Arduino 系列&#xff09;&#xff0c;核心目标是在标准字符型 LCD 显示屏上实现高效、低开销的实时线性数据可视化。它不依赖图形点阵驱动或外部显存&a…...

springboot-vue+nodejs的在线考试题库管理系统

目录技术栈选择系统模块划分关键实现细节部署与优化扩展功能&#xff08;可选&#xff09;项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术栈选择 后端框架&#xff1a;Spring Boot&#xff08;Java&#xff09;负责核心业…...