【问题标题】:Text alignment in DataGridDataGrid 中的文本对齐方式
【发布时间】: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}"/>

怎么了?

【问题讨论】:

标签: wpf xaml 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>
            

            【讨论】:

              猜你喜欢
              • 2020-02-22
              • 2014-07-27
              • 2015-11-10
              • 1970-01-01
              • 1970-01-01
              • 2016-08-10
              • 1970-01-01
              • 1970-01-01
              • 2019-09-17
              相关资源
              最近更新 更多