【问题标题】:how to text-align columns in DataGrid? (a rational way)如何在 DataGrid 中对列进行文本对齐? (理性的方式)
【发布时间】:2014-07-27 12:12:47
【问题描述】:

我使用 WPF (C#)。我使用数据网格。 我希望第一列与中心对齐,其他列右对齐。

我一般都有风格:

<Style x:Key="TextInCellCenter" TargetType="{x:Type TextBlock}" >
     <Setter Property="HorizontalAlignment" Value="Center"/>
</Style>

<Style TargetType="{x:Type DataGridCell}">       
     <Setter Property="HorizontalAlignment" Value="Right"/>
</Style>

数据网格:

<DataGrid Name="DG1">
  <DataGrid.Columns>
    <DataGridTextColumn ElementStyle="{StaticResource TextInCellCenter}" Binding="{Binding Path=Name}" />
    <DataGridTextColumn Binding="{Binding Path=Number}" />
    <DataGridTextColumn Binding="{Binding Path=Number}" />
    ....
    <DataGridTextColumn Binding="{Binding Path=Number}" />
    <DataGridTextColumn Binding="{Binding Path=Number}" />
  </DataGrid.Columns>
</DataGrid>

<DataGrid Name="DG2">
  <DataGrid.Columns>
    <DataGridTextColumn ElementStyle="{StaticResource TextInCellCenter}" Binding="{Binding Path=Name}" />
    <DataGridTextColumn Binding="{Binding Path=Number}" />
    <DataGridTextColumn Binding="{Binding Path=Number}" />
    ...
    <DataGridTextColumn Binding="{Binding Path=Number}" />
    <DataGridTextColumn Binding="{Binding Path=Number}" />
  </DataGrid.Columns>
</DataGrid>
....

我有所有的列都是右对齐的

请告诉我,如何更改第一列有一个居中文本对齐

附言如何以理性的方式去做?我有很多类似的表格。

【问题讨论】:

    标签: wpf datagrid styles text-alignment


    【解决方案1】:

    您可以将ElementStyle 更改为TextBlock 并将TextAlignment 更改为RightCenter,而不是更改Center 的样式,并在每列基础上应用它

    <DataGridTextColumn Binding="{Binding Path=Number}" >
       <DataGridTextColumn.ElementStyle>
          <Style TargetType="{x:Type TextBlock}">
             <Setter Property="TextAlignment" Value="Right"/>
          </Style>
       </DataGridTextColumn.ElementStyle>
    </DataGridTextColumn>
    

    或在DataGrid.Resources 中创建此Style,以便您可以应用于多个列

    <DataGrid>
        <DataGrid.Resources>
            <Style x:Key="TextInCellCenter" TargetType="{x:Type TextBlock}" >
                <Setter Property="TextAlignment" Value="Center"/>
            </Style>
            <Style TargetType="{x:Type TextBlock}" x:Key="RightAligElementStyle">
                <Setter Property="TextAlignment" Value="Right"/>
            </Style>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTextColumn ElementStyle="{StaticResource TextInCellCenter}" Binding="{Binding Path=Name}" />
            <DataGridTextColumn Binding="{Binding Path=Number}" ElementStyle="{StaticResource RightAligElementStyle}" />
            <DataGridTextColumn Binding="{Binding Path=Number}" ElementStyle="{StaticResource RightAligElementStyle}"/>
            <DataGridTextColumn Binding="{Binding Path=Number}" ElementStyle="{StaticResource RightAligElementStyle}"/>
        </DataGrid.Columns>        
    </DataGrid>
    

    【讨论】:

    • 谢谢,但第一种方法不起作用,第二种方法不方便,因为我有 10 多个表,其中很多添加相同的列(如列“数字”)。为每个相同的列定义样式需要很长时间。
    猜你喜欢
    • 2013-08-13
    • 2020-02-22
    • 2012-02-07
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多