在将DataPresenter扩展到DataGrid的同时将内容保持在中间?

时间:2019-05-01 08:43:39

标签: wpf styles contentpresenter

我发现使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不会填充整个单元格,而是在值周围有一个白框,看起来像这样:< / p>

enter image description here

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

<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才能工作,这违反了重用性的整个目的。

将白盒延伸到整个单元格或完全禁用白盒的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我找到了一种将Textbox绑定到Content的方法,而不是使用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>

这使我可以完全展开文本框,而灰色单元格中没有白色的小框。

相关问题