简单问题:如何在WPF中的dataGridCell上设置填充? (一次一个或所有细胞,我都不在乎)
我尝试使用DataGrid.CellStyle
属性,在DataGridCell.Padding
属性上添加一个setter,并以相同的方式使用DataGridColumn.CellStyle
属性,但没有效果。
我也尝试使用DataGridColumn.ElementStyle
属性而没有更多运气。
我有点卡在那里,有没有人设法在dataGridCell上应用填充?
注意:我会补充说不,我不能使用透明边框来执行此操作,因为我已经将边框属性用于其他内容。我也不能使用margin属性(这看起来很有效,令人惊讶的是)因为我使用了background属性而且我不希望我的单元格之间有任何“空白”空间。
答案 0 :(得分:109)
问题是Padding
未转移到Border
模板中的DataGridCell
。您可以编辑模板并为Padding
<DataGrid ...>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Padding" Value="20"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.CellStyle>
<!--...-->
</DataGrid>
答案 1 :(得分:17)
这是一种更清洁的方法(我认为),结合了大卫的方法
<Resources>
<Style x:Key="ColumnElementStyle" TargetType="TextBlock">
<Setter Property="Margin" Value="5,0,10,0" />
</Style>
</Resources>
...然后
<DataGridTextColumn ElementStyle="{StaticResource ColumnElementStyle}" />
<DataGridTextColumn ElementStyle="{StaticResource ColumnElementStyle}" />
(在我的情况下,我的行是只读的,所以没有EditingStyle)
答案 2 :(得分:8)
差不多5年之后,因为这个问题似乎仍然有用(它仍然得到了提升)并且因为它已被请求,这里是我在TextColumn上使用的解决方案(使用ElementStyle)(但你可以做到)对于任何类型的DataGridColumn都是一样的:
我在代码背后做了所有这些:
class MyTextColumn : DataGridTextColumn
{
public MyTextColumn()
{
ElementStyle = new Style(typeof(TextBlock));
EditingElementStyle = new Style(typeof(TextBox));
ElementStyle.Setters.Add(new Setter(FrameworkElement.MarginProperty, new Thickness(3)));
EditingElementStyle.Setters.Add(new Setter(Control.PaddingProperty, new Thickness(0, 1, 0, 1)));
}
}
但是如果你想直接在xaml中执行:
<DataGrid.Columns>
<DataGridTextColumn>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="Margin" Value="3"/>
</Style>
</DataGridTextColumn.ElementStyle>
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="TextBox">
<Setter Property="Padding" Value="0 1 0 1"/>
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
答案 3 :(得分:1)
<DataGrid.Columns>
<DataGridTextColumn MinWidth="100" Header="Changed by" Width="" Binding="{Binding Changedby}" IsReadOnly="True" >
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Background" Value="Transparent" />
<Setter Property="FrameworkElement.HorizontalAlignment"Value="Center"/>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
答案 4 :(得分:0)
您也可以尝试更改
{Binding BindingValue, StringFormat={}{0:#0.0000}}
到
{Binding BindingValue, StringFormat={}{0:#0.0000 }}
有趣的是,WPF的XAML {0:#0.0000}将以渲染控件的格式表示这个额外的空格字符,以便将您的值移出网格列的边缘。