如何使WPF列表框始终为4个网格行的高度?

如何使WPF列表框始终为4个网格行的高度?,wpf,listbox,grid,height,rows,Wpf,Listbox,Grid,Height,Rows,如何使我的列表框成为行的标准高度,即使在我向列表框添加了几个项目之后?我也不想给这两个设定一个高度。我尝试设置一些共享大小组,尝试将每行的高度绑定到不同的行,等等,但没有找到解决方案。我希望列表框占据的四行的高度与它们原来的高度相同。列表框当前会增长以适应其中的所有项目,因此会使行更高,这是我不希望看到的。如果列表框高于4“正常”行高度,我希望列表框只显示滚动条。如果我必须在列表框上设置一个maxHeight,我怎么能告诉它是我的另一行高度的4倍 XAML: 我希望它始终保持外观(以及列

如何使我的列表框成为行的标准高度,即使在我向列表框添加了几个项目之后?我也不想给这两个设定一个高度。我尝试设置一些共享大小组,尝试将每行的高度绑定到不同的行,等等,但没有找到解决方案。我希望列表框占据的四行的高度与它们原来的高度相同。列表框当前会增长以适应其中的所有项目,因此会使行更高,这是我不希望看到的。如果列表框高于4“正常”行高度,我希望列表框只显示滚动条。如果我必须在列表框上设置一个maxHeight,我怎么能告诉它是我的另一行高度的4倍

XAML:


我希望它始终保持外观(以及列表框中没有项目时的外观):

在我将项目添加到列表框后它会执行什么操作:

为VIV的建议编辑:

<Window x:Class="SharedSizes.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <!--<Style TargetType="{x:Type RowDefinition}">
        <Setter Property="Height" Value="25"/>
    </Style>-->
</Window.Resources>

<Border Margin="10" >
    <StackPanel>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition  />
                <ColumnDefinition  />
                <ColumnDefinition  />
                <ColumnDefinition  />
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>

            <!--Left Side Parts-->

            <Label Content="Vendor:" Grid.Row="0" Grid.Column="0" />
            <ComboBox Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="3" />

            <Label Content="Billing Model:" Grid.Row="1" Grid.Column="0" />
            <ComboBox Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" />

            <Label Content="Billing Cycle:" Grid.Row="2" Grid.Column="0"/>
            <ComboBox Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" />

            <StackPanel Grid.Row="2" Grid.Column="3" Orientation="Horizontal" >
                <Button Content="1"/>
                <Button Content="2"/>
                <Button Content="3"/>
                <Button  Content="4"/>
            </StackPanel>
        </Grid>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="{Binding ElementName=SomeLabel, Path=DesiredSize.Height}"/>
                <RowDefinition Height="{Binding ElementName=SomeLabel, Path=DeisredSize.Height}"/>
                <RowDefinition Height="{Binding ElementName=SomeLabel, Path=DeisredSize.Height}"/>
                <RowDefinition Height="{Binding ElementName=SomeLabel, Path=DeisredSize.Height}"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition  />
                <ColumnDefinition  />
                <ColumnDefinition  />
                <ColumnDefinition  />
                <ColumnDefinition  />
                <ColumnDefinition  />
            </Grid.ColumnDefinitions>

            <Label Content="Fred" Grid.Row="0" x:Name="SomeLabel"/>
            <Label Content="Fred" Grid.Row="0" Grid.Column="1"/>
            <Label Content="Fred" Grid.Row="0" Grid.Column="2" />
            <Label Content="Fred" Grid.Row="0" Grid.Column="3"/>
            <Label Content="Fred" Grid.Row="0" Grid.Column="4"/>
            <Label Content="Fred" Grid.Row="1"/>
            <Label Content="Fred" Grid.Row="2"/>
            <Label Content="Fred" Grid.Row="3"/>
            <ListView Name="FredBox" Grid.Row="0" Grid.Column="5" Grid.RowSpan="4"  />
        </Grid>
    </StackPanel>
</Border>


您可以通过使用每行中另一项(您拥有的
标签
)的
所需大小.高度设置
网格.Row
高度

因此,通过切换:

...
<!--<RowDefinition Height="{Binding ElementName=Row1, Path=ActualHeight}"/>
    <RowDefinition Height="{Binding ElementName=Row1, Path=ActualHeight}" />
    <RowDefinition Height="{Binding ElementName=Row1, Path=ActualHeight}" />
    <RowDefinition Height="{Binding ElementName=Row1, Path=ActualHeight}" />-->
...
<Label Grid.Row="0"
       Content="Fred" />
...
只有第一行是正确的


这是
DesiredSize
而不是

您可以通过在每行中使用另一项(您拥有的
标签
)的
DesiredSize.Height
设置网格.Row
高度来实现

因此,通过切换:

...
<!--<RowDefinition Height="{Binding ElementName=Row1, Path=ActualHeight}"/>
    <RowDefinition Height="{Binding ElementName=Row1, Path=ActualHeight}" />
    <RowDefinition Height="{Binding ElementName=Row1, Path=ActualHeight}" />
    <RowDefinition Height="{Binding ElementName=Row1, Path=ActualHeight}" />-->
...
<Label Grid.Row="0"
       Content="Fred" />
...
只有第一行是正确的


它是
DesiredSize
而不是
DeisredSize

如果跟踪到自动大小,它将增长以适应内容。我认为您需要设置列表框的高度,或者设置网格行的高度。你有什么反对的理由吗?最外层的容器是stackpanel这一事实可能是有问题的,因为它们的大小通常很不理想。如果我必须将其设置为一个高度,我如何告诉它是其他行的4倍?我希望我所有的行基本上都是相同的高度。我想我必须为行选择一个高度并将其应用于所有行?@user1029770是的,我只是在底部设置了一些缓冲空间,并设置一行,其中不包含其他内容无法扩展的内容。您应该编写自己的VirtualzingStackPanel。如果跟踪到Auto大小,它将增长以适应内容。我认为您需要设置列表框的高度,或者设置网格行的高度。你有什么反对的理由吗?最外层的容器是stackpanel这一事实可能是有问题的,因为它们的大小通常很不理想。如果我必须将其设置为一个高度,我如何告诉它是其他行的4倍?我希望我所有的行基本上都是相同的高度。我想我必须为行选择一个高度,并将其应用于所有行?@user1029770是的,我只需要在底部设置一些缓冲空间,然后设置一个不包含任何其他内容的行。你应该编写自己的VirtualzingStackPanel。@Viv-在尝试了你的建议后,我编辑了原始帖子以显示结果。我仍然看到列表框在增长,因此行的高度也变得太大。与您的解决方案有什么不同?太棒了!谢谢你的帮助,这正是我现在想要的。都是些小事,对吧@在我尝试了你的建议后,我编辑了原始帖子以显示结果。我仍然看到列表框在增长,因此行的高度也变得太大。与您的解决方案有什么不同?太棒了!谢谢你的帮助,这正是我现在想要的。都是些小事,对吧?!
<RowDefinition Height="{Binding ElementName=SomeLabel, Path=DesiredSize.Height}" />
<RowDefinition Height="{Binding ElementName=SomeLabel, Path=DesiredSize.Height}" />
<RowDefinition Height="{Binding ElementName=SomeLabel, Path=DesiredSize.Height}" />
<RowDefinition Height="{Binding ElementName=SomeLabel, Path=DesiredSize.Height}" />
...
<Label x:Name="SomeLabel"
        Grid.Row="0"
        Content="Fred" />
...
...
<RowDefinition Height="{Binding ElementName=SomeLabel, Path=DesiredSize.Height}" />
<RowDefinition Height="{Binding ElementName=SomeLabel, Path=DeisredSize.Height}"/>
<RowDefinition Height="{Binding ElementName=SomeLabel, Path=DeisredSize.Height}"/>
<RowDefinition Height="{Binding ElementName=SomeLabel, Path=DeisredSize.Height}"/>
...