簡體   English   中英

WPF DataGrid文本垂直對齊

[英]WPF DataGrid Text Vertical Alignment

我正在使用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,我可以看到這是導致問題的邊界。 這是:Snoop顯示為http://imgur.com/9pD0W5C作為邊框,並且除非單擊鼠標時我的鼠標處於打開狀態或紅色突出顯示的行中,否則將不會選擇/突出顯示該行。

有什么方法可以修改我的模板,以使其在單擊單元格的任何部分而不是僅在邊框內時突出顯示行?

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

我已經嘗試過以我的樣式設置TextElement.VerticalAlignment ,但這會導致datagrid中有些多余的行看起來很奇怪。

模板中的邊框由於居中而無法填充DataGridCell的可用空間( VerticalAlignment="Center"

如果僅為ContentPresenter設置VerticalAlignment="Center" ,為Border設置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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM