You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF DataGrid无法占满剩余可用空间 列宽无法随窗口自适应调整

问题根源

当前配置的核心问题是DataGrid控件本身设置了HorizontalAlignment="Left"和VerticalAlignment="Top",这两个属性会强制DataGrid仅占用刚好容纳内容的大小、靠左上对齐,不会撑满父容器的可用空间。哪怕你设置了列宽为*,也只会在DataGrid本身的有限宽度内分配,自然会出现右侧空白。


可行解决步骤

  1. 修正DataGrid的对齐属性
    将DataGrid标签里的HorizontalAlignment="Left"和VerticalAlignment="Top"删除,或者修改为Stretch,修改后的DataGrid起始标签示例:
<DataGrid x:Name="ResultDataGrid" Margin="40,30,6,6" Grid.Row="1"  ScrollViewer.CanContentScroll="True" AutoGenerateColumns="False" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"
          ItemsSource="{Binding Records}" Background="Transparent"   HeadersVisibility="Column" IsReadOnly="true" CanUserSortColumns="False"  LostFocus="ResultDataGrid_LostFocus" HorizontalAlignment="Stretch"  VerticalAlignment="Stretch">
  1. 配置列宽分配规则
    你可以按需选择任意一种列宽配置方式:
  • 全局平均分配:直接在DataGrid标签上添加ColumnWidth="*",所有列会平均分配DataGrid的全部宽度
  • 按内容需求分配比例:给每个列单独设置宽度,适配不同列的内容长度需求,示例如下:
<DataGrid.Columns>
    <!-- 复选框列设为Auto,仅占用刚好放下复选框的宽度 -->
    <DataGridTemplateColumn Width="Auto">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <CheckBox VerticalAlignment="Center" IsChecked="{Binding Path=IsCheck,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"  Click="CheckBox_Click"/>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    <!-- 其余列按比例分配剩余宽度,可根据实际内容调整比例值 -->
    <DataGridTextColumn x:Name="DeviceSNDataGridText" Binding="{Binding InsCCode}" 
                        Header="{StaticResource DeviceSNString}"  FontSize="14" Width="1.5*"/>
    <DataGridTextColumn x:Name="DataTimeDataGridText" Binding="{Binding Created}" 
                        Header="{StaticResource DateTimeString}" Width="1*"/>
    <DataGridTextColumn x:Name="ModeDataGridText" Binding="{Binding Mode}" 
                        Header="{StaticResource ModeString}"  FontSize="14" Width="1*"/>
    <DataGridTextColumn x:Name="ResultDataGridText" Binding="{Binding Result}" 
                        Header="{StaticResource ResultString}"  FontSize="14" Width="1*" />
    <DataGridTextColumn x:Name="ScanIndexDataGridText" Binding="{Binding ScanIndex}"
                        Header="{StaticResource ScanIndexString}"  FontSize="14" Width="0.8*"/>
</DataGrid.Columns>

完成以上两步即可实现DataGrid撑满父容器可用空间,列宽按配置自动分配,不会出现右侧空白。


内容的提问来源于stack exchange,提问作者Kafka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:15:00