DataGrid 中的文本对齐方式

Posted

技术标签:

【中文标题】DataGrid 中的文本对齐方式【英文标题】:Text alignment in DataGrid 【发布时间】:2013-08-13 04:24:48 【问题描述】:

我正在使用 WPF 进行编程。我需要一种在 DataGrid 控件中制作单元格中心内容的方法。我也使用此代码:

<DataGrid x:Name="dg1" HorizontalAlignment="Left" Margin="10,10,0,0"
    VerticalAlignment="Top" Height="360" Width="498"
    FontFamily="2  Badr" FontSize="18" 
    AlternatingRowBackground="LightCoral" FlowDirection="RightToLeft"
    HorizontalContentAlignment="Center" VerticalContentAlignment="Center" 
    Background="x:Null"/>

怎么了?

【问题讨论】:

复制:***.com/questions/6072093/… Text alignment in a WPF DataGrid的可能重复 【参考方案1】:

你需要设置 DataGridCell 样式

    <DataGrid>
        <DataGrid.Columns>
            <DataGridTextColumn>
                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="TextBlock">
                        <Setter Property="HorizontalAlignment" Value="Center" />
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>

【讨论】:

(致 Lai32290)这不是我的答案。您的回答在我的数据集中添加一列,甚至我的一个单元格内容都不设置中心。 这个答案对我来说是正确的 - 你怎么知道单元格内容是否正确对齐而不添加至少一列? (对 Babak)对不起,那个代码真的不行,我已经编辑了我的代码,请再试一次 (致 Lai32290)感谢您的回答,但它不起作用。我的内容是 RTL(从右到左)。有问题吗? @Babak.Abad 回答你 RTL 不是他的代码按预期工作的问题【参考方案2】:

对于那些只需要在 VB.NET 中从自定义 XAML 样式格式化一个动态 DataGrid 列的人:

在 Application.xaml 中:

<Application.Resources>
    <ResourceDictionary>
        <Style x:Key="DataGridCellCentered" TargetType="DataGridCell">
            <Setter Property="TextBlock.TextAlignment" Value="Center" />
        </Style>
    </ResourceDictionary>
</Application.Resources>

在 VB.NET 代码中:

Me.MyDataGrid.Columns(5).CellStyle = TryFindResource("DataGridCellCentered")

问候!

【讨论】:

【参考方案3】:

正如其他答案中提到的:

<Setter Property="HorizontalAlignment" Value="Center" />

这将影响任何其他样式,例如背景。要仅使文本居中,请改用:

<Setter Property="TextAlignment" Value="Center" />

【讨论】:

【参考方案4】:

也许只是创建一个样式:

<Window.Resources>
    <Style TargetType="DataGridCell">
        <Setter Property="HorizontalAlignment" Value="Center" />
    </Style>
</Window.Resources>  

已编辑。

【讨论】:

如何在我的代码中使用它?请解释一下。我是 xaml 的新手 您可以在窗口的资源中添加样式 对我来说不好,因为你的文本框边框/大小可能没有完全填充单元格大小。所以我更喜欢Lai32290的答案【参考方案5】:

影响所有列

 <Window.Resources>
        <Style TargetType="DataGridColumnHeader">
            <Setter Property="HorizontalAlignment" Value="Stretch"/>
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
        </Style>
 </Window.Resources>

【讨论】:

看起来这只影响列标题。另外: 不是必需的(是默认值)我错过了什么吗?【参考方案6】:

如果您想在 DataGridTemplateColumn 中居中日期

 <DataGridTemplateColumn SortMemberPath="DataDiNascita" Header="Data di nascita" IsReadOnly="False">
                <DataGridTemplateColumn.CellEditingTemplate>                        
                    <DataTemplate>
                        <DatePicker SelectedDate="Binding Path=DataDiNascita,Mode=TwoWay" VerticalAlignment="Center" HorizontalAlignment="Left">                                
                        </DatePicker>                           
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
                <DataGridTemplateColumn.CellTemplate>                        
                    <DataTemplate>
                        <TextBlock Text="Binding Path=DataDiNascita,Mode=TwoWay,StringFormat=\0:dd/MM/yyyy\"  VerticalAlignment="Center" HorizontalAlignment="Left">                              
                        </TextBlock>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

【讨论】:

【参考方案7】:

如何在 WPF DataGrid 中居中文本

<DataGrid >
    <DataGrid.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="TextBlock.TextAlignment" Value="Center" />
        </Style>
    </DataGrid.CellStyle>
    <DataGrid.ColumnHeaderStyle>
        <Style TargetType="DataGridColumnHeader">
            <Setter Property="Label.HorizontalContentAlignment" Value="Center" />
        </Style>
    </DataGrid.ColumnHeaderStyle>
</DataGrid>

【讨论】:

【参考方案8】:

我认为这取决于在数据网格中填充或停靠的面板水平内容对齐不起作用 对于中心内容对齐,您可以像这样使用 DataGrid.resource 标记

<DataGrid.Resources>
                <Style TargetType="DataGridCell">
                    <Setter Property="HorizontalAlignment" Value="Center"/>
                </Style>
                <Style TargetType="DataGridColumnHeader">
                    <Setter Property="HorizontalContentAlignment" Value="Center"/>
                </Style>
</DataGrid.Resources>

或者看看这个

 <DataGrid x:Name="DgvUsers" AutoGenerateColumns="False" IsReadOnly="True" EnableRowVirtualization="False"
                      HorizontalContentAlignment="Stretch" VerticalContentAlignment="Center" HeadersVisibility="Column"
                      IsTextSearchEnabled="True" FlowDirection="RightToLeft" SelectionMode="Single" FontFamily="/Sandogh.App;component/Font/#Lalezar" >
                <DataGrid.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="HorizontalAlignment" Value="Center"/>
                    </Style>
                </DataGrid.CellStyle>
                <DataGrid.Columns>
                    <DataGridTextColumn Header="UserID" Visibility="Collapsed" Binding="Binding Path=UserID"/>
                    <DataGridTextColumn Header="FirstName" Binding="Binding Path=Name">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="TextBlock">
                                <Setter Property="HorizontalAlignment" Value="Center" />
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                    </DataGridTextColumn>
                    <DataGridTextColumn Header="LastName" Binding="Binding Path=Family"/>
                    <DataGridTextColumn Header="Gender" Binding="Binding Path=TGender"/>
                    <DataGridTextColumn Header="UserName" Binding="Binding Path=UserName"/>
                    <DataGridTextColumn Header="Password" Binding="Binding Path=Password"/>
                    <DataGridTextColumn Header="Activity" Binding="Binding Path=TActivity"/>
                    <DataGridTextColumn Header="JobID" Visibility="Collapsed" Binding="Binding Path=JobID"/>
                    <DataGridTextColumn Header="JobName" Binding="Binding Path=JobName"/>
                </DataGrid.Columns>
            </DataGrid>

【讨论】:

【参考方案9】:

在我的情况下,这(非常简单)工作正常:

<DataGrid
    x:Name="MyDataGrid"
    ...
    TextBlock.TextAlignment="Center">
</DataGrid>

【讨论】:

以上是关于DataGrid 中的文本对齐方式的主要内容,如果未能解决你的问题,请参考以下文章

xaml 无法在 DataGrid 模板中垂直对齐文本

JQuery EasyUI之DataGrid列名和数据列分别设置不同对齐方式(转)

DataGrid 行内容垂直对齐

C# DataGrid根据某列的内容设置行字体加粗 单元格设置对齐方式

Flex - 垂直对齐 Datagrid 标题文本的问题

C#/VB.NET:在 Word 中设置文本对齐方式