首页 文章

WPF DataGrid文本垂直对齐

提问于
浏览
0

我正在使用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 但这会导致数据网格中有一些看起来很奇怪的额外行 .

1 回答

  • 2

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

    如果你只为ContentPresenter设置 VerticalAlignment="Center" ,为边框设置 VerticalAlignment="Stretch"HorizontalAlignment="Stretch" ,它应该可以工作 .

    在风格中配置对齐更好(有风格)

    <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>
    

相关问题