C# Silverlight-如何使列表框中的每个项目具有相同的高度?
如何制作silverlight列表框,使所有项目大小相同,并且占据列表框高度的100%。即,1项为列表框的高度,2项各为列表框高度的50%,等等 编辑-以下是代码C# Silverlight-如何使列表框中的每个项目具有相同的高度?,c#,.net,wpf,silverlight,C#,.net,Wpf,Silverlight,如何制作silverlight列表框,使所有项目大小相同,并且占据列表框高度的100%。即,1项为列表框的高度,2项各为列表框高度的50%,等等 编辑-以下是代码 public class UniformPanel : Panel { protected override Size MeasureOverride(Size availableSize) { Size panelDesiredSize = new Size(); for (int
public class UniformPanel : Panel
{
protected override Size MeasureOverride(Size availableSize)
{
Size panelDesiredSize = new Size();
for (int i = 0; i < Children.Count; i++)
{
UIElement child = Children[i];
child.Measure(availableSize);
var childDesiredSize = child.DesiredSize;
panelDesiredSize.Height += childDesiredSize.Height;
if (panelDesiredSize.Width < childDesiredSize.Width)
{
panelDesiredSize.Width = childDesiredSize.Width;
}
}
return panelDesiredSize;
}
protected override Size ArrangeOverride(Size finalSize)
{
double height = finalSize.Height/Children.Count;
for (int i = 0; i < Children.Count; i++)
{
UIElement child = Children[i];
Size size = new Size(finalSize.Width, height);
child.Arrange(new Rect(new Point(0, i * height), size));
}
return finalSize; // Returns the final Arranged size
}
}
公共类统一面板:面板
{
受保护的覆盖尺寸测量覆盖(尺寸可用尺寸)
{
尺寸面板DesiredSize=新尺寸();
for(int i=0;i
我明白了,你的要求只是让每件物品的总高度/物品正确无误。。在这种情况下,可以通过将Columns=1来使用UniformGrid(它已经作为平台的一部分存在)
使用以下XAML
<ListBox VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid IsItemsHost="True" Columns="1"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<Button />
<Button />
<Button />
</ListBox>
更新:silverlight没有UniformGrid,但您可以获得一个我从WPF移植到silverlight的UniformGrid,我明白了,您的要求只是让每个项目都获得TotalHeight/itemsCount。。在这种情况下,可以通过将Columns=1来使用UniformGrid(它已经作为平台的一部分存在) 使用以下XAML
<ListBox VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid IsItemsHost="True" Columns="1"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<Button />
<Button />
<Button />
</ListBox>
更新:silverlight没有UniformGrid,但是你可以得到一个我从WPF移植到silverlight的UniformGrid。我不认为这是微不足道的,因为列表框有无限高,添加足够的项目,滚动条可以显示,内容的高度会增加 列表框的rendersize.height将让您确定可用高度,然后告诉子项调整大小,但Jobi的正确之处在于,您最好将所有这些封装在自定义面板中。子项还需要接受正在调整大小,并且不使用无法覆盖的固定高度
理论上,每个孩子都可以检查父母渲染的高度和项目数,然后给它一个渲染高度的百分比,它可以使用并适当调整大小,但我想到了凌乱。我不认为这是微不足道的,因为列表框有无限高,添加足够的项目,滚动条可以显示,并且内容的高度会增加 列表框的rendersize.height将让您确定可用高度,然后告诉子项调整大小,但Jobi的正确之处在于,您最好将所有这些封装在自定义面板中。子项还需要接受正在调整大小,并且不使用无法覆盖的固定高度 理论上,每个孩子都可以检查父母渲染的高度和项目数,然后给它一个渲染高度的百分比,它可以使用并适当调整大小,但会想到凌乱