C# 同时使用控件高度和Grid.RowSpan
我有一些像这样的XAML: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"/> </
<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"/>