Установка заполнения для dataGridCells в WPF
простой вопрос: Как я могу установить заполнение на dataGridCell в WPF? (либо по одному, либо по всем клеткам, мне все равно)
Я пробовал использовать DataGrid.CellStyle
свойство путем добавления сеттера на DataGridCell.Padding
свойство, а также использование DataGridColumn.CellStyle
свойство таким же образом без эффекта.
Я также попытался с помощью DataGridColumn.ElementStyle
собственность больше не повезло.
Я вроде застрял там, кто-нибудь сумел получить прокладку, примененную на dataGridCell?
NB: я добавлю, что нет, я не могу использовать прозрачные границы для этого, так как я уже использую свойства границы для чего-то другого. Я также не могу использовать свойство margin (которое, как ни странно, работает), поскольку я использую свойство background, и я не хочу никакого "пустого" пространства между моими ячейками.
5 ответов
проблема в том, что Padding
не переданы Border
это в шаблоне DataGridCell
. Вы можете отредактировать шаблон и добавить TemplateBinding для 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>
вот более чистый метод (мое мнение), который сочетает в себе подход от Дэвида
<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)
почти 5 лет спустя, поскольку этот вопрос, похоже, все еще используется (он все еще получает upvotes), и поскольку он был запрошен, вот решение, которое я использовал (с ElementStyle) на TextColumn (но вы можете сделать то же самое для любого типа 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>
<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>
вы также можете попробовать изменить
{Binding BindingValue, StringFormat={}{0:#0.0000}}
to
{Binding BindingValue, StringFormat={}{0:#0.0000 }}
достаточно интересно, что XAML WPF {0:#0.0000 } будет использовать этот дополнительный символ пробела в формате отображаемого элемента управления для перемещения значений с края столбцов сетки.