在将内容保持在中间的同时拉伸 DataGrid 中的 ContentPresenter?

Stretch the ContentPresenter in a DataGrid while keeping the Content in the middle?

我发现让我的 Content 垂直和水平居中的最简单方法是:

<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type DataGridCell}">
            <Grid Background="Gray">
                <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" />
            </Grid>
        </ControlTemplate>
    </Setter.Value>
</Setter>

但我真的不喜欢我的实际 TextBox 在尝试编辑单元格值时没有填充整个单元格,而是值周围有一个白色框,看起来像这样:

无法为 ContentPresenter 设置 HorizontalContentAlignment,尽管我通过在我的 ControlTemplate 中使用 TextBox 获得了预期的效果,如下所示:

<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type DataGridCell}">
            <Grid VerticalAlignment="Stretch">
                <TextBox Text="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" BorderThickness="0" Background="Gray">
                </TextBox>
            </Grid>
        </ControlTemplate>
    </Setter.Value>
</Setter>

它需要特定的 Binding 才能工作,这违背了可重用性的全部目的。

让白框覆盖整个单元格或完全禁用白框的最佳方法是什么?

我没有使用 ContentPresenter,而是找到了一种将文本框绑定到内容的方法,如下所示:

<Style TargetType="DataGridCell" x:Key="TextBoxTemplateCellStyle" BasedOn="{StaticResource DefaultCellStyle}"> 
        <Setter Property="Width" Value="40" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridCell}">
                    <Grid>
                        <TextBox Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Text}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" BorderThickness="0"  Background="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Background}">
                            <TextBox.Style>
                                <Style TargetType="{x:Type TextBox}">
                                </Style>
                            </TextBox.Style>
                        </TextBox>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

这让我可以将我的文本框拉伸到最大,同时我的灰色单元格中没有小的白色框。