Wpf 数据网格总是显示滚动条并填满 space

Wpf datagrid always show scrollbar and fill up the space

即使只有 10 行,我如何制作 DataGrid 来填充 space 并显示垂直滚动条?

这是当前代码:

<UserControl xmlns:Wpf="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"  x:Class="myclass.uccontrol"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d" 
             Focusable="True"
             d:DesignHeight="10000" d:DesignWidth="1049">

    <UserControl.Resources>          
    </UserControl.Resources>

    <Grid VerticalAlignment="Top">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />               
        </Grid.ColumnDefinitions>

        <DockPanel >
            <DataGrid Name="dataGrid"
                      AutoGenerateColumns="False"
                      ScrollViewer.CanContentScroll="True" 
                      ScrollViewer.VerticalScrollBarVisibility="Auto"
                      ScrollViewer.HorizontalScrollBarVisibility="Auto"  
                      HorizontalAlignment="Stretch"
                      VerticalAlignment="Stretch">

                <DataGrid.Columns>    
                    <DataGridTextColumn Header = " Name" Binding = "{Binding Name, Mode=OneWay}" SortMemberPath="Name" />
                    <DataGridTextColumn Width="*" Header = " Date" Binding = "{Binding Date, StringFormat=\{0:d\}, Mode=OneWay}" SortMemberPath="DocumentDate" />    
                </DataGrid.Columns>
            </DataGrid>
        </DockPanel>         
    </Grid>
</UserControl>

<Grid VerticalAlignment="Top"> 声明使父网格尽量少占用垂直space。删除 VerticalAlignment="Top" 声明。

要显示垂直滚动条,请使用 VerticalScrollBarVisibility="Visible" 并删除 ScrollViewer.* 属性。

顺便说一句,在提供的代码中:

  • DockPanel没用
  • Grid没用。 但是我会保留它,也许还有其他东西,它与问题有关。
  • HorizontalAlignment="Stretch"VerticalAlignment="Stretch" 没用 (Stretch is the default value).
  • 您可以折叠一些空标签。

代码应该是这样的:

<UserControl x:Class="myclass.uccontrol"
             xmlns:Wpf="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d" 
             Focusable="True"
             d:DesignHeight="10000" d:DesignWidth="1049">

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />               
        </Grid.ColumnDefinitions>

        <DataGrid Name="dataGrid"
                  AutoGenerateColumns="False"                  
                  VerticalScrollBarVisibility="Visible">

            <DataGrid.Columns>    
                <DataGridTextColumn Header=" Name" Binding="{Binding Name, Mode=OneWay}" SortMemberPath="Name" />
                <DataGridTextColumn Width="*" Header = " Date" Binding="{Binding Date, StringFormat=\{0:d\}, Mode=OneWay}" SortMemberPath="DocumentDate" />    
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</UserControl>

注意: 数据网格的底部将是灰色的,您可以使用 Background 属性 更改此设置。如果你想要空行,试试 this.