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

Выравнивание текста в WPF DataGrid

Как сопоставить данные столбца с центром в WPF DataGrid?

4b9b3361

Ответ 1

Трудно сказать, не зная специфики, но здесь DataGridTextColumn, который центрирован:

<wpf:DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True">
    <wpf:DataGridTextColumn.CellStyle>
        <Style>
            <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
        </Style>
    </wpf:DataGridTextColumn.CellStyle>
</wpf:DataGridTextColumn>

Ответ 2

Если вы используете DataGridTextColumn, вы можете использовать следующий фрагмент кода:

<Style TargetType="DataGridCell">
     <Style.Setters>
            <Setter Property="TextBlock.TextAlignment" Value="Center" />
     </Style.Setters>
</Style>

Ответ 3

Я начал с решения huttelihut. К сожалению, пока это не сработало. Я изменил его ответ и придумал это (решение заключается в выравнивании текста вправо):

<Resources>
    <Style x:Key="RightAligned" TargetType="TextBlock">
        <Setter Property="HorizontalAlignment" Value="Right"/>
    </Style>
</Resources>

Как вы можете видеть, я применил стиль к TextBlock, а не к DataGridCell.

И тогда мне пришлось установить стиль Элемент, а не стиль Ячейка.

ElementStyle="{StaticResource RightAligned}"

Ответ 4

+1 для Кента Боогаарта. Я закончил это, что делает код немного менее загроможденным (и позволяет мне использовать выравнивание по нескольким столбцам):

<Resources>
      <Style x:Key="NameCellStyle" TargetType="DataGridCell">
                <Setter Property="HorizontalAlignment" Value="Center" />
      </Style>
</Resources>


<DataGrid.Columns>                           
   <DataGridTextColumn Header="Name" CellStyle="{StaticResource NameCellStyle}" Binding="{Binding Name}"/>                            
    // .. other columns        
</DataGrid.Columns>

Ответ 5

Здесь @MohammedAFadil XAML ответ, преобразованный в код С# позади:

var MyStyle = new Style(typeof(DataGridCell)) {
    Setters = {
        new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Center)
    }
};

Чтобы применить Style, установите свойство CellStyle для DataGrid, например

var MyGrid = new DataGrid() {
    CellStyle = MyStyle
};

Ответ 6

Или в коде позади:

grid.CellStyle = newCellStyle();

public static Style newCellStyle()
{
    //And here is the C# code to achieve the above
    System.Windows.Style style = new Style(typeof(DataGridCell));
    style.Setters.Add(new System.Windows.Setter
    {
        Property = Control.HorizontalAlignmentProperty,
        Value = HorizontalAlignment.Center
    });
    return style;
}

Ответ 7

У меня возникли проблемы с перемещением ячейки и фанкой с использованием принятого ответа. Я знаю это поздно, но, надеюсь, мои результаты помогут кому-то. Я использую:

<DataGridTextColumn.ElementStyle>
     <Style>
          <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
     </Style>

а не CellStyle.

Ответ 8

Хорошо, я использовал подход frameworkElement, но было странное поведение, когда вы пытаетесь выделить строку.

Я добавил еще один пример выравнивания WPat Datagrid в этом потоке!

Ответ 9

Мое любимое решение:

<DataGridTextColumn Header="My Column" Binding="{Binding MyDBValue}" Width="100" >
<DataGridTextColumn.CellStyle>
        <Style>
                <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
        </Style>
</DataGridTextColumn.CellStyle>

Ответ 10

Спасибо Дэнни Беккет за перевод @MohammedAFadil XAML ответа, преобразованного в код С#. Все мои datagrids настроены динамически, поэтому я могу что-то менять, когда угодно.

Чтобы установить пустой datagrid, в нем ничего нет, а затем просто привяжите его к данным, просто возьмите свои datagrid.columns

        var centerTextSetter = new Style(typeof(DataGridCell))
        {
            Setters = { new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Center) }
        };
        DgDbNames.Columns.Add(new DataGridTextColumn()
        {
            Header = "Db Name",
            Binding = new System.Windows.Data.Binding("DbName"),
            IsReadOnly = true,
            Width = new DataGridLength(0.2, DataGridLengthUnitType.Star),
            CellStyle = centerTextSetter
        });

Ответ 11

Для меня это хорошо работает

<DataGridTextColumn Width="1*" Binding="{Binding Balance, StringFormat=C} "Header="Balance">
  <DataGridTextColumn.CellStyle>
      <Style>
        <Setter Property="TextBlock.TextAlignment"  Value="Right"/>
      </Style>
   </DataGridTextColumn.CellStyle>
 </DataGridTextColumn>