WPF开发一个可以自适应排列的Panel控件

这篇具有很好参考价值的文章主要介绍了WPF开发一个可以自适应排列的Panel控件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.控件介绍

    初看标题可能无法理解,我们看看什么是自适应排列。

WPF开发一个可以自适应排列的Panel控件

乍一看它有点像WrapPanel控件,都是从左至右排列,如果一行排列不下就换行继续排列,但是细看你就会发现不对,WrapPanel控件行尾是不会对齐的,也就是说只要WrapPanel的子控件的宽度不一致,每一行的末尾就会必定留下一段空白,而这个控件每一行末尾都是对齐的,这就让人很疑惑了,既然每个子控件的宽度不一样,怎么可能每一行的子控件宽度都正好?

二.实现思路

    首先我们要解决子控件高度问题,不同于WrapPanel控件取一个最高的子控件高度作为行高度,这里我们每一行子控件的高度都是一样的,如果直接测量子控件的尺寸,我们会得到一堆高低不同的子控件,所以在测量控件的时候我们需要给它一个统一的高度,这样就会得到一个高度一致,宽度各不同的子控件。

    其次我们使用测量出的尺寸从左至右排列,如果当前子控件排列的位置超出了Panel控件的最大宽度就换行继续排列,此时的排列方式与WrapPanel控件几乎一致。最关键的点来了,我们需要计算出每一行的子控件的测量出的总宽度,然后与Panel控件的总宽度做计算,得出最终的行高度,然后再做第二次测量,得出最终的子控件高度与宽度。

    最后我们通过测量出的子控件的宽度、高度、坐标等信息,在Panel控件中正常排列即可达到最终效果。

三.关键代码

3.1 第一次测量子控件尺寸

child.Measure(new Size(double.PositiveInfinity, ChildMinHeight));

3.2 第二次测量子控件尺寸

var rowWidth = row.CellList.Sum(item => item.Rect.Width);
 double width, height = child.DesiredSize.Height;

 var zoomRatio = availableSize.Width / rowWidth;
 var itemX = 0d;
 foreach (var item in row.CellList)
 {
     width = item.Rect.Width * zoomRatio;
     height = item.Rect.Height * zoomRatio;

     item.Rect = new Rect(itemX, item.Rect.Y, width, height);
     item.Element.Measure(item.Rect.Size);
     itemX += width;
 }

四.运行效果

4.1 正常效果

WPF开发一个可以自适应排列的Panel控件

4.2 添加动画以后的效果

WPF开发一个可以自适应排列的Panel控件

 文章来源地址https://www.toymoban.com/news/detail-844128.html

到了这里,关于WPF开发一个可以自适应排列的Panel控件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WPF应用开发之控件动态内容展示

    在我们开发一些复杂信息的时候,由于需要动态展示一些相关信息,因此我们需要考虑一些控件内容的动态展示,可以通过动态构建控件的方式进行显示,如动态选项卡展示不同的信息,或者动态展示一个自定义控件的内容等等,目的就是能够减少一些硬编码的处理方式,以

    2024年02月05日
    浏览(63)
  • C#在winForm窗体中添加一个可以自由拖动的控件

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 目录 文章目录 一、实现步骤 1.创建一个新的Windows窗体项目 2.添加控件如图 3.代码部分 总结 textBox1=鼠标在需要拖动的控件中的坐标 X 值 textBox2=鼠标在需要拖动的控件中的坐标 Y 值 textBox3=需要

    2024年01月19日
    浏览(44)
  • WPF开发经验-WPF的TextBox控件的MouseDown事件不响应的解决方法

    最近项目有个需求,大概是,当点击某个TextBox时,先执行一些业务上的逻辑处理。 于是按以往思维,将TextBox的MouseDown事件关联事件处理方法,将业务处理写在方法里。 调试发现,点击TextBox时,事件处理方法未执行。 通过查阅微软官方文档了解到问题原因。 附上文档链接:

    2024年02月08日
    浏览(44)
  • MAUI 框架开发 将 MAUI 嵌入到 WPF 控件里

    本文将介绍如何将 MAUI 的底层替换为 WPF 框架层,且将 MAUI 的内容嵌入到 WPF 的一个控件里面,无 UI 框架嵌入的空域问题 本文是 MAUI 框架开发博客,而不是 MAUI 应用开发博客,本文更多介绍的是进行 MAUI 这个框架的开发内容。不熟悉或不进行 MAUI 框架开发的伙伴也可以看着玩

    2024年02月17日
    浏览(46)
  • MaterialSkin与系统Panel容器结合使用,实现自适应舒适布局

    你是否也有这样的疑惑,当窗口拖拽之后,要如何才能填补右侧和下方的空缺? 有些人直接固定窗体大小,不允许用户拖拽。。。 也有萌新直接问我,MaterialSkin里面没有什么办法能让拖拽的时候,控件也跟着动吗? 其实这些功能在 系统的Panel 里面早就有了,只是大家不知道

    2024年02月06日
    浏览(42)
  • Wpf基础入门——容器Panel篇

    一个窗口中只能包含一个元素 不应显示设置元素尺寸 不应使用坐标设置元素的位置 可以嵌套布局容器 Grid:网格。可以自定义行和列并通过行列的数量、行高和列宽来调整控件的布局。近似于HTML中的Table。 StackPanel:栈式面板。可将包含的元素在竖直或水平方向上排成一条直线

    2024年02月06日
    浏览(72)
  • 1Panel使用GMSSL+Openresty实现国密/RSA单向自适应

    本文 首发于 Anyeの小站,转载请取得作者同意。 国密算法是国家商用密码算法的简称。自2012年以来,国家密码管理局以《中华人民共和国密码行业标准》的方式,陆续公布了SM2/SM3/SM4等密码算法标准及其应用规范。其中“SM”代表“商密”,即用于商用的、不涉及国家秘密的

    2024年02月19日
    浏览(30)
  • 使用WPF开发自定义用户控件,以及实现相关自定义事件的处理

    在前面随笔《使用Winform开发自定义用户控件,以及实现相关自定义事件的处理》中介绍了Winform用户自定义控件的处理,对于Winform自定义的用户控件来说,它的呈现方式主要就是基于GDI+进行渲染的,对于数量不多的控件呈现,一般不会觉察性能有太多的问题,随着控件的数量

    2024年02月02日
    浏览(52)
  • 零基础学习CANoe Panel(2)—— 控件布局

    🍅 我是 蚂蚁小兵 ,专注于车载诊断领域,尤其擅长于对CANoe工具的使用 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】 🍅 零基础学习CANoe Panel设计目录汇总,点击跳转👉 🍅 这个系列是关于 CANoe Panel 设计的,本章节讲解, Panel 控件布局

    2023年04月23日
    浏览(82)
  • WPF自定义Panel:让拖拽变得更简单

       在 WPF 应用程序中,拖放操作是实现用户交互的重要组成部分。通过拖放操作,用户可以轻松地将数据从一个位置移动到另一个位置,或者将控件从一个容器移动到另一个容器。然而,WPF 中默认的拖放操作可能并不是那么好用。为了解决这个问题,我们可以自定义一个

    2024年03月27日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包