Выравнивание текста в WPF DataGrid - PullRequest
49 голосов
/ 06 апреля 2009

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

Ответы [ 11 ]

89 голосов
/ 28 апреля 2010

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

<Style TargetType="DataGridCell">
     <Style.Setters>
            <Setter Property="TextBlock.TextAlignment" Value="Center" />
     </Style.Setters>
</Style>
45 голосов
/ 06 апреля 2009

Трудно сказать, не зная специфики, но вот 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>
19 голосов
/ 09 мая 2013

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

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

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

А потом мне пришлось установить стиль Элемент , а не стиль Cell .

ElementStyle="{StaticResource RightAligned}"
14 голосов
/ 28 марта 2011

+ 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>
10 голосов
/ 26 августа 2014

Вот ответ XAML @ MohammedAFadil, преобразованный в код C #:

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

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

var MyGrid = new DataGrid() {
    CellStyle = MyStyle
};
4 голосов
/ 23 августа 2012

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

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;
}
3 голосов
/ 03 июля 2013

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

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

, а не CellStyle.

1 голос
/ 09 июля 2011

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

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

1 голос
/ 24 августа 2009

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

Я поместил еще один пример выравнивания WPF Datagrid в нить !

0 голосов
/ 02 апреля 2019

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

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