WPF DataGrid表头模板中TextBox无法占满可用空间问题排查
问题原因及解决方案
你的问题出在两个关键点:
- DataGrid列头的默认容器(
DataGridColumnHeader)的HorizontalContentAlignment属性默认值为Left,导致模板内的Grid无法填满整个列头宽度。 - 模板里的
TextBox默认HorizontalAlignment是Left,即便Grid的列宽设为*,它也不会自动拉伸占据可用空间。
修复步骤:
- 修改
FileNameHeaderTemplate,给Grid添加HorizontalAlignment="Stretch",同时给TextBox设置HorizontalAlignment="Stretch":
<DataTemplate x:Key="FileNameHeaderTemplate"> <Grid HorizontalAlignment="Stretch"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Label Grid.Column="0" Content="Filename" /> <TextBox Grid.Column="1" HorizontalAlignment="Stretch" /> </Grid> </DataTemplate>
- 给
DataGridTextColumn设置HeaderStyle,让列头容器的内容水平拉伸:
<DataGridTextColumn Binding="{Binding FileName}" HeaderTemplate="{StaticResource FileNameHeaderTemplate}"> <DataGridTextColumn.HeaderStyle> <Style TargetType="DataGridColumnHeader"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> </Style> </DataGridTextColumn.HeaderStyle> </DataGridTextColumn>
修改完成后,TextBox就能完全占据列头的可用剩余空间。
内容的提问来源于stack exchange,提问作者David McCallum
相关产品推荐
相关产品推荐

