Как сопоставить данные столбца с центром в WPF DataGrid
?
Выравнивание текста в WPF DataGrid
Ответ 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>