C# 同时使用控件高度和Grid.RowSpan

C# 同时使用控件高度和Grid.RowSpan,c#,wpf,xaml,listbox,C#,Wpf,Xaml,Listbox,我有一些像这样的XAML: <Grid HorizontalAlignment="Center" ShowGridLines="True"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </

我有一些像这样的XAML:

<Grid HorizontalAlignment="Center" ShowGridLines="True">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <ListBox Grid.RowSpan="3" ItemsSource="{Binding OverrideEntityList}" Margin="5" Height="200" Width="250" ScrollViewer.VerticalScrollBarVisibility="Auto"/>
    <ComboBox Grid.Column="1" ItemsSource="{Binding GeometryType}" SelectedIndex="0" Margin="5" SelectionChanged="ComboBox_SelectionChanged"/>
    <Grid x:Name="AddLineGrid" Grid.Row="1" Grid.Column="1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Label Content="Length:" Margin="5"/>
        <TextBox Grid.Column="1" Text="{Binding OverrideLength}" Width="50" Margin="5"/>
        <Label Grid.Row="1" Content="Angle:" Margin="5"/>
        <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding OverrideAngle}" Width="50" Margin="5"/>
    </Grid>
    <Grid x:Name="AddArcGrid" Grid.Row="1" Grid.Column="1" Visibility="Collapsed">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Label Content="Diameter:" Margin="5"/>
        <TextBox Grid.Column="1" Text="{Binding OverrideLength}" Width="50" Margin="5"/>
        <Label Grid.Row="1" Content="Angle:" Margin="5"/>
        <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding OverrideAngle}" Width="50" Margin="5"/>
    </Grid>
    <Button Grid.Row="2" Grid.Column="1" Content="Add" Command="{Binding AddOverrideEntityCommand}" Margin="5"/>
</Grid>
我试图让列表框填充整个列,但只填充一定的高度,因为我不希望在添加项目时列表框会扩展,只希望滚动条出现

Visual Studio中的XAML设计器向我展示了我所期望的:

但是,当我构建程序时,生成的视图似乎不符合列表框的Grid.RowSpan:

在列表框上设置高度与Grid.RowSpan之间是否存在冲突?还是我还遗漏了什么

在列表框上设置高度与Grid.RowSpan之间是否存在冲突?还是我还遗漏了什么

ListView确实跨越所有3行,但由于它的高度只有200,并且窗口的高度大于此值,因此它自然无法从上到下填充整个列

您应该将ListView的高度设置为与窗口相同的高度,以便执行此操作。最初可以使用一次性绑定执行此操作:


我只是将Height=200属性移到了网格中,而不是ListBox中,这似乎解决了问题。我仍然不知道为什么XAML设计器向我显示了一件事,但实际视图向我显示了另一件事,因为窗口的设计高度与运行时的实际高度不同。但你永远不应该相信设计师。重要的是您在运行时体验到的行为。可以完全禁用设计器:
<ListBox Grid.RowSpan="3" ItemsSource="{Binding OverrideEntityList}" Margin="5" Height="{Binding Height, RelativeSource={RelativeSource AncestorType=Window}, Mode=OneTime}" Width="250" ScrollViewer.VerticalScrollBarVisibility="Auto"/>