WPF笔记(2.9和2.10)——Layout

 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 );
        }

    }

}

 

posted @ 2007-04-02 21:14  包建强  Views(3112)  Comments(2Edit  收藏  举报