1

私は 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自分のスタイルで設定しようとしましたが、これにより、データグリッド内に奇妙に見える余分な行がいくつか発生します。

4

1 に答える 1

3

テンプレートの境界線は、中央に配置されているため、使用可能な DataGridCell スペースを埋めません ( VerticalAlignment="Center")

VerticalAlignment="Center"ContentPresenter と Border のみを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>
于 2016-04-18T17:53:51.893 に答える