【发布时间】:2014-05-06 10:04:01
【问题描述】:
所以我试图让 itemscontrol 中的一些项目水平拉伸,当您查看以下代码时,您可能会注意到我非常绝望。我简化了我的代码并添加了一些颜色,以便更好地查看哪些控件在哪里开始和结束......有没有可能告诉项目同样拉伸并填充整个水平空间?
<Grid Background="Red" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ItemsControl x:Name="HorizontalListBox" Background="Blue"
HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch">
<ItemsControl.Items>
<System:Int32>4</System:Int32>
<System:Int32>4</System:Int32>
<System:Int32>4</System:Int32>
<System:Int32>4</System:Int32>
<System:Int32>4</System:Int32>
</ItemsControl.Items>
<ItemsControl.Template>
<ControlTemplate>
<ItemsPresenter HorizontalAlignment="Stretch"/>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Background="Green"
VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<TextBlock Text="Test" HorizontalAlignment="Stretch"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
看起来像这样:this http://image-upload.de/image/0TgZx9/0dd27b5326.png
然而,我希望有可能让绿色物品遍布整个地方。
编辑:感谢在下面的答案中找到的博文,它进行了一些调整:
protected override Size MeasureOverride(Size availableSize)
{
var size = new Size();
SetSide(ref size, GetSide(availableSize));
foreach (UIElement child in Children)
{
child.Measure(availableSize);
SetOtherSide(ref size, Math.Max(GetOtherSide(size), GetOtherSide(child.DesiredSize)));
}
_measureSize = size;
return size;
}
protected override Size ArrangeOverride(Size finalSize)
{
double offset = 0;
foreach (UIElement child in Children)
{
double side = GetSide(_measureSize) / Children.Count;
var final = new Size();
SetSide(ref final, side);
SetOtherSide(ref final, GetOtherSide(finalSize));
child.Arrange(new Rect(GetOffsetPoint(offset), final));
offset += side;
}
return finalSize;
}
【问题讨论】:
-
有一种比我的“调整”更好(因为它工作得更好而且更简单)的方法,可以在这里找到:stackoverflow.com/a/23517858/1662314
标签: silverlight xaml itemscontrol