DataGridTextColumn.Header 中元素的宽度

Width of element in DataGridTextColumn.Header

请帮忙如何将DataGridTextColumn.Header中文本框的宽度拉伸到整个长度。

<DataGridTextColumn x:Name="BColumn" Width="*">
                    <DataGridTextColumn.Header>
                        <StackPanel Orientation="Vertical" HorizontalAlignment="Center" MinWidth="20">
                            <TextBlock Text="B" VerticalAlignment="Top" FontStyle="Normal" HorizontalAlignment="Center"/>
                            <TextBox HorizontalAlignment="Stretch"                                             
                                     VerticalAlignment="Bottom"/>
                        </StackPanel>
                    </DataGridTextColumn.Header>
                </DataGridTextColumn>

Link 申请 window: https://ibb.co/KjRhCPG

您需要在 DataGridColumnHeader 上将 HorizontalContentAlignment 属性 设置为 Stretch。以下是您如何通过一种风格来做到这一点:

<Style TargetType="DataGridColumnHeader">
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>

您需要在 DataGrid.Resources 中添加此样式。

然后你需要为你的 Header 内容使用 Grid 而不是 StackPanel 因为 Grid 占用了整个可用的 space 和 StackPanel 没有

这里是完整的 XAML:

<DataGrid>
    <DataGrid.Resources>
        <Style TargetType="DataGridColumnHeader">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn x:Name="BColumn" Width="*">
            <DataGridTextColumn.Header>
                <Grid MinWidth="20">
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <TextBlock Text="B" VerticalAlignment="Top" FontStyle="Normal" HorizontalAlignment="Center"/>
                    <TextBox HorizontalAlignment="Stretch"                                             
                             VerticalAlignment="Bottom" Grid.Row="1"/>
                </Grid>
            </DataGridTextColumn.Header>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>