WPF 设置 DataGrid 动态高度并使用 Horizontal GridSplitter

问题描述 投票:0回答:1

我正在创建一个包含 2 行网格的应用程序。它的顶行有一个数据网格,底行有一个描述区域。现在我有两个问题:

  1. 如果我没有专门设置DataGrid的高度,加载大约100多行需要更长的时间。如果行太多,则需要很长时间。如果我设置高度,它会立即加载任意数量的行并显示垂直滚动条。如何在不指定 height/maxheight 属性的情况下将 DataGrid 设置为适合第一行?

  2. 我想使用水平网格分割器,以便我可以调整每行的大小。但是,在 DataGrid 加载行后,它不起作用。它在加载行之前起作用。

以下是我的代码:

<ScrollViewer >
    <Grid>
        

        <Grid.RowDefinitions>
            <RowDefinition Height="0.5*" />
            <RowDefinition Height="0.5*" />
        </Grid.RowDefinitions>

        
        <GridSplitter Panel.ZIndex="1"
            ResizeDirection="Rows" 
                      HorizontalAlignment="Stretch"
                      VerticalAlignment="Top"
                      Grid.Row="1"
                      Grid.Column="1"
                      Height="2" 
                      Background="#c0c0c0" />

                <StackPanel Grid.Row="0">

                <DataGrid 
                    Margin="10" 
                    Name="EventLogsDataGrid" 
                    IsReadOnly="False" 
                    SelectionChanged="EventLogsDataGrid_OnSelectionChanged"
                    AutoGenerateColumns="False"
                    CanUserSortColumns="False"
                    EnableColumnVirtualization="True"
                    EnableRowVirtualization="True"
                    ColumnWidth="*"
                    MaxHeight="500"
                    IsSynchronizedWithCurrentItem="True"
                    CanUserAddRows="False"
                    CanUserResizeRows="True"
                    VerticalAlignment="Stretch"
                    CanUserDeleteRows="False" />


</StackPanel>

<StackPanel Grid.Row="1">

<Label Content="Description" Margin="5 0 0 0"/>

</StackPanel>

</Grid>
</ScrollViewer>

我尝试将 DataGrid HorizontalAlignment 设置为 Stretch。我还尝试使用绑定将 DataGrid 的高度设置为父元素,但它不起作用。

c# wpf datagrid gridsplitter
1个回答
0
投票

StackPanel 会根据其子元素的需要而增长,这意味着您的 DataGrid 会扩展到最大高度。因此,只需删除 StackPanel 并将 DataGrid 添加为 Grid 的直接子级即可。同时删除其他 StackPanel,因为拥有它是没有意义的。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="0.5*" />
        <RowDefinition Height="0.5*" />
    </Grid.RowDefinitions>

    <GridSplitter .../>
    <DataGrid  Grid.Row="0" .../>
    <Label Grid.Row="1" .../>
</Grid>
© www.soinside.com 2019 - 2024. All rights reserved.