wpf ListBox,item两列不等高。
2015-07-31 10:46
519 查看
业务有这样的需求,类似瀑布流。内容两列不等高展示。
只需要继承panel,重写MeasureOverride和ArrangeOverride方法就行了。
很简单,内容都在代码里。
只需要继承panel,重写MeasureOverride和ArrangeOverride方法就行了。
很简单,内容都在代码里。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; namespace XXXXXX { public class TwoColumnPanel : Panel { /// <summary> /// 先测量需要多大尺寸,做个申报准备 /// </summary> /// <param name="constraint">限定的尺寸,比如,规定了width和height</param> /// <returns></returns> protected override Size MeasureOverride(Size constraint) { //定义预期的宽度和高度 double height = 0, height1 = 0, height2 = 0, width = 0; UIElement element; if (Children.Count > 0) { element = Children[0]; width = element.DesiredSize.Width*2; } //遍历每个元素,计算所需的总尺寸 for (int i = 0; i < Children.Count; i++) { element = Children[i]; //按照限定的尺寸测量一下自己,拿镜子找着自己 element.Measure(constraint); if (i % 2 == 0) { height1 += element.DesiredSize.Height; } else { height2 += element.DesiredSize.Height; } } height = height1 > height2 ? height1 : height2; //申报,我需要这个尺寸 return new Size(width, height); } /// <summary> /// 排列每个元素 /// </summary> /// <param name="arrangeBounds">测量的尺寸</param> /// <returns></returns> protected override Size ArrangeOverride(Size arrangeBounds) { double currentX2 = 0,currentY1 = 0,currentY2 = 0; UIElement element; if (Children.Count > 0) { element = Children[0]; currentX2 = element.DesiredSize.Width; } for (int i = 0; i < Children.Count; i++) { element = Children[i]; //排列每个元素 if (i % 2 == 0) { Children[i].Arrange(new Rect(0, currentY1, element.DesiredSize.Width, element.DesiredSize.Height)); currentY1 += element.DesiredSize.Height; } else { Children[i].Arrange(new Rect(currentX2, currentY2, element.DesiredSize.Width, element.DesiredSize.Height)); currentY2 += element.DesiredSize.Height; } } return arrangeBounds; } } }
相关文章推荐
- DQL、DML、DDL、DCL概念与区别
- 在安卓系统中插入表情到光标位置的代码详解
- 备忘录模式-Memento Pattern
- 安装Android studio出现'tools.jar' seems to be not in Android Studio classpath......的解决方法
- C# 扩展方法
- Java 类反射基础
- Oracle 学习之RMAN(八)分配Channel
- Ubuntu系统修改源和替换软件源的方法
- 用法总结:NSNumber、NSString、NSDate、NSCalendarDate、NSData(待续)
- 嵌入式软件开发——嵌入式软件工程师:就职的“门票”
- hdu 1285 确定比赛名次(拓扑排序)
- IOS-应用之间的跳转和打开别人的应用程序探讨
- UVA 11214 Guarding the Chessboard 守卫棋盘(迭代加深+剪枝)
- 有空学习学习
- The return types for the following stored procedures could not be detected
- html与html5
- “再回首,云遮断归途,再回首,荆棘密布...
- win10字体模糊显示不清晰怎么调整?
- 一杯香茗,一点曲,
- javascript常用正则表达式汇总