Welcome

首页 / 软件开发 / .NET编程技术 / WPF笔记(2.9和2.10)——Layout

WPF笔记(2.9和2.10)——Layout2011-09-20 博客园 包建强2.9讲的是,如果内部设定超过容器大小,怎么办?

StackPanel会裁剪越界部分

DockPanel和Grid会智能判断,从而决定换行。

2.10 自定义布局容器

自定义容器要实现两个方法MeasureOverride和ArrangeOverride,并保证遍历其下的所有子控件,使 他们都执行Measure和Arrange方法。

using System;
using System.Windows.Controls;
using System.Windows;

namespace CustomPanel {
public class DiagonalPanel : Panel {

protected override Size MeasureOverride( Size availableSize ) {
double totalWidth = 0;
double totalHeight = 0;

foreach( UIElement child in Children ) {
child.Measure( new Size( double.PositiveInfinity,
double.PositiveInfinity ) );
Size childSize = child.DesiredSize;
totalWidth += childSize.Width;
totalHeight += childSize.Height;
}

return new Size( totalWidth, totalHeight );
}

protected override Size ArrangeOverride( Size finalSize ) {
Point currentPosition = new Point( );

foreach( UIElement child in Children ) {
Rect childRect = new Rect( currentPosition, child.DesiredSize );
child.Arrange( childRect );
currentPosition.Offset( childRect.Width, childRect.Height );
}

return new Size( currentPosition.X, currentPosition.Y );
}
}
}