当最大化窗口时,WPF Datagrid不会填充整个高度和宽度

时间:2019-07-02 12:06:21

标签: wpf

当我在WPF应用程序中最大化窗口时,我的DataGrid并没有占用整个空间。这就是我创建布局的方式

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <Grid Grid.Row="0" Grid.Column="0" Width="265">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="200" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>

        <Label Grid.Row="0" Grid.Column="0" Content="Date From:" />
        <Label Grid.Row="1" Grid.Column="0" Content="Date To:" />
        <DatePicker Grid.Column="1" Grid.Row="0" Margin="3" x:Name="DateFrom" />
        <DatePicker Grid.Column="1" Grid.Row="1" Margin="3" x:Name="DateTo" />
        <Button Grid.Column="1" Grid.Row="2" HorizontalAlignment="Right" 
                        MinWidth="80" Margin="3" Content="Send" Click="PopulateGrid"  x:Name="BtnPopulateGrid"/>
    </Grid>

    <StackPanel Grid.Row="0" Grid.Column="1">
        <DataGrid Width="Auto" x:Name="Grid" Height="553" 
                  Padding="10 0 0 0" VerticalScrollBarVisibility="Visible" Margin="10,0,-707,0" />
    </StackPanel>
</Grid>

,这是常规尺寸的样子: enter image description here

,这是window为max时的样子: enter image description here

可以帮忙吗?我是WPF的新手

2 个答案:

答案 0 :(得分:2)

尝试添加数据网格ColumnWidth="*"

它将所有列扩展到可用空间,并且数据网格将填充其父级

第一个网格的第二个ColumnDefinition应该为<ColumnDefinition Width="*" />

正如@Zacos在我的答案评论中所说,您必须删除Width

答案 1 :(得分:1)

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid Grid.Row="0" Grid.Column="0">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="200" />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>

            <Label Grid.Row="0" Grid.Column="0" Content="Date From:" />
            <Label Grid.Row="1" Grid.Column="0" Content="Date To:" />
            <DatePicker Grid.Column="1" Grid.Row="0" Margin="3" x:Name="DateFrom" />
            <DatePicker Grid.Column="1" Grid.Row="1" Margin="3" x:Name="DateTo" />
            <Button Grid.Column="1" Grid.Row="2" HorizontalAlignment="Right" MinWidth="80" Margin="3" Content="Send" Click="PopulateGrid"  x:Name="BtnPopulateGrid"/>
        </Grid>

        <Grid Grid.Row="0" Grid.Column="1">
            <DataGrid x:Name="Grid" Padding="10 0 0 0" VerticalScrollBarVisibility="Visible" />
        </Grid>
    </Grid>

首先,如果要使数据网格自动填充容器,则需要使用Grid,而不是StackPanel,还需要将数据网格大小设置为自动。

编辑: 正如@Erjon所说的:当您只有一个DataGrid时不必使用容器,但是如果您的DataGrid中包含更多组件,则Grid是代替StackPanel的更好的容器选择。

您的主要GridDefination大小设置为“自动”,这是错误的。如果要进行定性设计,则需要使用“ *”。自动表示“用其子项设置此控件的大小”。

enter image description here