Подтвердить что ты не робот

Установите дополнение в dataGridCells в WPF

простой вопрос: как я могу установить дополнение в dataGridCell в WPF? (по одному за раз или по всем ячейкам, мне все равно)

Я попытался использовать свойство DataGrid.CellStyle, добавив сеттер в свойство DataGridCell.Padding, а также используя свойство DataGridColumn.CellStyle таким же образом без эффекта.

Я также попытался использовать свойство DataGridColumn.ElementStyle, не имея больше удачи.

Я как бы застрял там, кому-нибудь удалось получить дополнение, примененное к dataGridCell?

NB: Я добавлю, что нет, я не могу использовать прозрачные границы для этого, так как я уже использую свойства границ для чего-то другого. Я также не могу использовать свойство margin (которое, кажется, работает, как ни странно), поскольку я использую свойство background, и я не хочу "пустое" пространство между моими ячейками.

4b9b3361

Ответ 1

Проблема заключается в том, что 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>

Ответ 2

Здесь более чистый метод (мое мнение), который сочетает в себе подход от Дэвида

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

Ответ 3

Почти 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>

Ответ 4

Вы также можете попробовать изменить

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

to

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

Интересно, что WPF XAML {0: # 0.0000} будет отмечать этот лишний символ пробела в формате обработанного элемента управления, чтобы переместить ваши значения с края столбцов сетки.

Ответ 5

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