如何将数据网格中的内容集中在一起?

时间:2011-05-20 12:47:45

标签: wpf datagrid row alignment

我设置数据网格的最小高度:

<DataGrid MinRowHeight="40">

在为数据网格提供数据后,每个单元格中的文本都是顶部和左侧对齐的。 我找不到一种简单的方法来集中文本。

有关这方面的建议吗?

10 个答案:

答案 0 :(得分:37)

最终解决方案:

<Style x:Key="DataGridContentCellCentering" TargetType="{x:Type DataGridCell}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Grid Background="{TemplateBinding Background}">
                    <ContentPresenter VerticalAlignment="Center" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

答案 1 :(得分:18)

以下代码将以DataGrid中的单元格内容为中心:

<Style TargetType="DataGridCell">
    <Setter Property="TextBlock.TextAlignment" Value="Center" />
</Style>

答案 2 :(得分:7)

你可以使用样式。我为DataGridCheckBoxColumn添加了一个示例,我希望它能让你朝着正确的方向前进。

<DataGridCheckBoxColumn Header="is active" IsReadOnly="False">
      <DataGridCheckBoxColumn.ElementStyle>
            <Style TargetType="CheckBox">
                 <Setter Property="VerticalAlignment" Value="Center"/>
                  <Setter Property="HorizontalAlignment" Value="Center"/>
             </Style>
      </DataGridCheckBoxColumn.ElementStyle>
      <DataGridCheckBoxColumn.Binding>
             <Binding Path="ISACTIVE" ValidatesOnDataErrors="True" Converter="{StaticResource MyBoolToIsActiveConverter}" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"
                                 NotifyOnValidationError="True" ValidatesOnExceptions="True">
                        </Binding>
                    </DataGridCheckBoxColumn.Binding>
                </DataGridCheckBoxColumn>

答案 3 :(得分:6)

尝试将DataGrid的Vertical和Horizo​​ntalContentAlignment设置为Center

<DataGrid VerticalContentAlignment="Center" HorizontalContentAlignment="Center" />

如果这不起作用,您可以使用this answer中的解决方案。它使用一种样式来对齐DataGrid单元格内容

答案 4 :(得分:3)

使用ElementStyle

let positions = [CGPointMake(CGRectGetMidX(self.frame)/1.35, CGRectGetMidY(self.frame)/1.32), ... /*add your 9 other positions here*/]
positions.enumerate().forEach { (index, point) in
  let spriteNode = SKNode()
  spriteNode.position = point
  let sprite = SKSpriteNode(imageNamed: "dot_\(index + 1)")
  sprite.zPosition = 3.0
  sprite.name = "A\(index + 1)_Dot"
  spriteNode.addChild(sprite)      

  // Add spriteNode to the scene here
}

答案 5 :(得分:2)

像这样修改你的风格标签......

 <Style x:Key="CellTextCentre" TargetType="DataGridCell">
    <Setter Property="TextBlock.TextAlignment" Value="Center"></Setter>
    <Setter Property="TextBlock.VerticalAlignment" Value="Center"></Setter> 
 </Style>

答案 6 :(得分:1)

此样式会将所有VerticalAlignment的{​​{1}}设置为Center,而无需显式应用。

DataGridCell

我发现这是最优雅的解决方案。

答案 7 :(得分:1)

下面的代码显示位于中央的datagrid单元。

<Style x:Key="DataGridCellStyle" TargetType="DataGridCell">
            <!--DISPLAY CONTENT IN MIDDLE-->
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridCell}">
                        <Grid Background="{TemplateBinding Background}">
                            <ContentPresenter VerticalAlignment="Center" />                        
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

答案 8 :(得分:0)

这里是this question的稍长版本。

#fa.modal.fade(tabindex='-1' role='dialog' aria-labelledby='exampleModalCenterTitle' aria-hidden='true')

答案 9 :(得分:0)

下面是一种更好的垂直放置内容中心的方法:

<Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource {x:Type DataGridCell}}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Grid Background="{TemplateBinding Background}">
                    <ContentPresenter VerticalAlignment="Center" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>