it-swarm.com.ru

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

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

49
Prashant C

Трудно сказать, не зная специфики, но вот 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>
43
Kent Boogaart

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

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

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

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

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

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

ElementStyle="{StaticResource RightAligned}"
19
Jan

+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>
14
T.J.Kjaer

Вот ответ 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
};
9
Danny Beckett

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

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;
}
4
Hans

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

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

а не CellStyle. 

3
Rachael

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

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

1
Web Developer

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

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

1
Junior M

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

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

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

Чтобы создать пустую сетку данных, в которой ничего нет, а затем просто привязать ее к данным, просто возьмите 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
        });
0
Stephen Himes