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