WPF DataGrid无法占满剩余可用空间 列宽无法随窗口自适应调整
问题根源
当前配置的核心问题是DataGrid控件本身设置了HorizontalAlignment="Left"和VerticalAlignment="Top",这两个属性会强制DataGrid仅占用刚好容纳内容的大小、靠左上对齐,不会撑满父容器的可用空间。哪怕你设置了列宽为*,也只会在DataGrid本身的有限宽度内分配,自然会出现右侧空白。
可行解决步骤
- 修正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">
- 配置列宽分配规则
你可以按需选择任意一种列宽配置方式:
- 全局平均分配:直接在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
相关产品推荐
相关产品推荐

