【问题标题】:WPF DataGrid Text Vertical AlignmentWPF DataGrid 文本垂直对齐
【发布时间】:2016-08-10 14:12:10
【问题描述】:

我正在使用 WPF DataGrid。我试图让我的 DataGridTextColumns 的内容垂直居中显示的文本。

目前,我的单元格值如下所示:http://imgur.com/nkbE7Wt。如您所见,它们垂直对齐到单元格的顶部。

我尝试将模板添加到我的 DataGridCells 的样式中,这很有效,并且它使文本居中,如下所示:http://imgur.com/TCo6RCa。 DataGridCells 的样式如下:

<Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}">
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="{StaticResource SelectedBrush}" />
            <Setter Property="TextElement.Foreground" Value="#111111" />
        </Trigger>        
    </Style.Triggers>
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="TextElement.Foreground" Value="#666666" />
    <Setter Property="BorderBrush" Value="Transparent" />
    <Setter Property="BorderThickness" Value="1" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Border Background="Transparent"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="0"
                        SnapsToDevicePixels="True"
                        Padding="5"
                        VerticalAlignment="Center">
                    <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

这个添加的模板在显示方式方面基本上完全符合我的要求。但是有一个问题。当用户单击任何单元格以突出显示该行时,他们必须在样式中设置的边框内单击才能实际使 DataGrid 突出显示该行。

使用Snoop 我可以看到这是导致问题的边界。这:http://imgur.com/9pD0W5C 是 Snoop 显示为边框的内容,除非我的鼠标在单击时位于或位于红色突出显示的行中,否则不会选择/突出显示该行。

有没有什么方法可以修改我的模板以允许它在单击单元格的任何部分时突出显示该行,而不仅仅是在边框内?

或者,是否有一些简单的方法可以使单元格中的文本垂直居中?

我已经尝试以我的风格设置TextElement.VerticalAlignment,但这会导致数据网格中出现一些看起来很奇怪的额外行。

【问题讨论】:

  • 为 ContentPresenter 设置 VerticalAlignment="Center" 为 ContentPresenter 设置 VerticalAlignment="Stretch"HorizontalAlignment="Stretch" 是否有帮助?
  • 做到了!谢谢一堆。如果您想重新提交作为答案,我可以将其标记为答案
  • 我遇到了类似的问题,通过在 ContentPresenter 中设置 VerticalAlignment="Center" 解决了这个问题。谢谢!

标签: c# wpf datagrid datagridcell


【解决方案1】:

模板中的边框未填充可用的 DataGridCell 空间,因为它居中 (VerticalAlignment="Center")

如果您为 ContentPresenter 设置了 VerticalAlignment="Center"only,为 Border 设置了 VerticalAlignment="Stretch"HorizontalAlignment="Stretch",它应该可以工作。

在style(with style)中配置对齐就更好了

<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type DataGridCell}">
            <Border ...>
                <ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}" ... />
            </Border>
        </ControlTemplate>
    </Setter.Value>
</Setter>

【讨论】:

    猜你喜欢
    • 2011-05-26
    • 2010-12-02
    • 2011-01-31
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2015-12-29
    • 2013-04-26
    相关资源
    最近更新 更多