我发现使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>
无法为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
才能工作,这违反了重用性的整个目的。
将白盒延伸到整个单元格或完全禁用白盒的最佳方法是什么?
答案 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>
这使我可以完全展开文本框,而灰色单元格中没有白色的小框。