C# 相对增加和减少网格的行高

C# 相对增加和减少网格的行高,c#,wpf,height,C#,Wpf,Height,我正在开发一个WPF应用程序。我有一个网格,它有两行。一行由datagrid组成,另一行有一些TextBlock,以显示datagrid中所选项目的详细视图 <Grid> <Grid.RowDefinitions> <RowDefinition Name="datagrid" Height="8*"></RowDefinition> <RowDe

我正在开发一个WPF应用程序。我有一个
网格
,它有两行。一行由
datagrid
组成,另一行有一些
TextBlock
,以显示
datagrid
中所选项目的详细视图

<Grid>
 <Grid.RowDefinitions>
                        <RowDefinition Name="datagrid" Height="8*"></RowDefinition>
                        <RowDefinition Name="detailedview" Height="2*"></RowDefinition>
</Grid.RowDefinitions>

 <my:DataGrid 
                              Grid.Row="0"
                              x:Name="dataGrid1" 
                              Width="auto" 
                              HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                              AutoGenerateColumns="False" CanUserAddRows="True" Margin="0,0,0,0">

<Grid Grid.Row="2">
<!- Detailed View->
</Grid>
</Grid>

问题是,我正在将Datagrid的ItemSource分配给代码隐藏中的IEnumerable集合

网格的行大小应该正好等于datagrid中的行数

剩余空间应被详细视图占用

添加两行或更多行时。具有datagrid的行的高度应该扩展,因此它应该正好容纳2行,详细视图的大小应该相对减小


如何在不将其编码为8*和2*的情况下实现它?

对于datagrid行设置为Auto的高度和对于deatiled行设置为*的高度,如下所示

        <RowDefinition Name="datagrid" Height="Auto"></RowDefinition>
        <RowDefinition Name="detailedview" Height="*"></RowDefinition>

由于datagrid行高是自动的,因此将datagrid的MinHeight属性设置为某个值,以便即使没有要显示的记录,datagrid也会占用更多的屏幕空间。下面我将最小高度设置为80

<my:DataGrid 
MinHeight="80"
Grid.Row="0"
x:Name="dataGrid1" 
Width="auto" 
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
AutoGenerateColumns="False" CanUserAddRows="True" Margin="0,0,0,0">


您可能还希望设置文本块的最小高度,以便当datagrid中有更多行时,文本块不会完全收缩。

您可以将datagrid放入ScrollViewer。尝试下一个标记:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="40"/>
    </Grid.RowDefinitions>
        <ScrollViewer Grid.Row="0">
        <my:DataGrid ... />
    </ScrollViewer>

    <TextBlock   Height="40" Grid.Row="1" />

</Grid>