110,536
社区成员
发帖
与我相关
我的任务
分享
<Grid Width="200" ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition MaxWidth="50" Width="*"/>
<ColumnDefinition MaxWidth="50" Width="*"/>
<ColumnDefinition MaxWidth="50" Width="*"/>
<ColumnDefinition MaxWidth="50" Width="*"/>
<ColumnDefinition MaxWidth="50" Width="*"/>
<ColumnDefinition MaxWidth="50" Width="*"/>
<ColumnDefinition MaxWidth="50" Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0">aaaaaaaaaaaaaa</Label>
<Label Grid.Column="1">bbbbbbbbbbbb</Label>
<Label Grid.Column="2">cccccccccccccc</Label>
<Label Grid.Column="3">dddddddddddddd</Label>
<Label Grid.Column="4">eeeeeeeeeeeeee</Label>
<Label Grid.Column="5">fffffffffffffff</Label>
<Label Grid.Column="6">ggggggggggggggg</Label>
</Grid>
public class SampleLayout : Panel {
public SampleLayout() {
this.Background = Brushes.Yellow;
}
protected override Size MeasureOverride(Size availableSize) {
double height = 0.0;
foreach (UIElement each in InternalChildren) {
each.Measure(availableSize);
height = Math.Max(height, each.DesiredSize.Height);
}
return new Size(availableSize.Width, height);
}
protected override Size ArrangeOverride(Size finalSize) {
var desiredWidth = InternalChildren.Cast<UIElement>().Sum(p => p.DesiredSize.Width);
if (desiredWidth <= finalSize.Width) {
var nextChildLeft = 0.0;
foreach (UIElement each in InternalChildren) {
each.Arrange(new Rect(new Point(nextChildLeft, 0), each.DesiredSize));
nextChildLeft += each.DesiredSize.Width;
}
} else {
var nextChildLeft = 0.0;
var avaWidth = finalSize.Width / InternalChildren.Count;
foreach (UIElement each in InternalChildren) {
each.Arrange(new Rect(new Point(nextChildLeft, 0), new Size(avaWidth, each.DesiredSize.Height)));
nextChildLeft += avaWidth;
}
}
return finalSize;
}
}