ventajas tipos sanitario requisitos relleno para desventajas caracteristicas wpf datagrid styling

tipos - Establecer un relleno en dataGridCells en WPF



requisitos para un relleno sanitario (5)

pregunta simple: ¿cómo puedo configurar un relleno en un dataGridCell en WPF? (ya sea uno a la vez o en todas las celdas, no me importa)

Intenté utilizar la propiedad DataGrid.CellStyle agregando un setter en la propiedad DataGridCell.Padding y también usando la propiedad DataGridColumn.CellStyle de la misma manera sin ningún efecto.

También intenté usar la propiedad DataGridColumn.ElementStyle sin más suerte.

Estoy algo atrapado allí, ¿alguien ha logrado aplicar un relleno en un dataGridCell?

NB: Añadiré que no, no puedo usar bordes transparentes para hacer esto, ya que ya uso las propiedades del borde para otra cosa. Tampoco puedo usar la propiedad de margen (que parece funcionar, sorprendentemente) ya que utilizo la propiedad de fondo y no quiero ningún espacio "en blanco" entre mis celdas.


Aquí hay un método más limpio (mi opinión) que combina el enfoque de David

<Resources> <Style x:Key="ColumnElementStyle" TargetType="TextBlock"> <Setter Property="Margin" Value="5,0,10,0" /> </Style> </Resources>

entonces...

<DataGridTextColumn ElementStyle="{StaticResource ColumnElementStyle}" /> <DataGridTextColumn ElementStyle="{StaticResource ColumnElementStyle}" />

(En mi caso, mis filas son de solo lectura, así que no EditingStyle)


Casi 5 años después, dado que esta pregunta parece ser útil (todavía se reciben votos por adelantado) y como se solicitó, aquí está la solución que utilicé (con ElementStyle) en una columna de texto (pero puedes hacer lo mismo con cualquier tipo de DataGridColumn):

Lo hice todo en código detrás:

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))); } }

Pero si quieres hacerlo directamente en 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>


El problema es que el Padding no se transfiere al Border que está en la plantilla para DataGridCell . Puede editar la plantilla y agregar TemplateBinding for 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>


También podrías intentar cambiar

{Binding BindingValue, StringFormat={}{0:#0.0000}}

a

{Binding BindingValue, StringFormat={}{0:#0.0000 }}

Curiosamente, el XAML de WPF {0: # 0.0000} respetará este carácter de espacio adicional en el formato del control representado para mover sus valores fuera del borde de las columnas de la cuadrícula.


<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>