C# Silverlight-如何使列表框中的每个项目具有相同的高度?

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

如何制作silverlight列表框,使所有项目大小相同,并且占据列表框高度的100%。即,1项为列表框的高度,2项各为列表框高度的50%,等等

编辑-以下是代码

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的正确之处在于,您最好将所有这些封装在自定义面板中。子项还需要接受正在调整大小,并且不使用无法覆盖的固定高度

理论上,每个孩子都可以检查父母渲染的高度和项目数,然后给它一个渲染高度的百分比,它可以使用并适当调整大小,但会想到凌乱