7

Windows7でVisualStudio2012を使用しています。グリッドで選択した行の次のスタイルが背景色と前景色では機能しないが、BorderBrushやBorderThicknessなどの他のプロパティでは完全に機能する理由を知る必要があります。グリッド行の上にマウスを置くと、それらが変化するのを見ることができますが。

<Style x:Key="gridRowStyle" TargetType="{x:Type DataGridRow}">
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="PeachPuff"/>
            <Setter Property="Foreground" Value="BlueViolet"/>
        </Trigger>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="PeachPuff"/>
            <Setter Property="Foreground" Value="BlueViolet"/>
            <Setter Property="BorderBrush" Value="BlueViolet" />
            <Setter Property="BorderThickness" Value="2" />

        </Trigger>
    </Style.Triggers>
</Style>

これが私がグリッドで使用している方法です。

<DataGrid RowStyle="{StaticResource gridRowStyle}">

次のように行スタイルの代わりにグリッドセルスタイルを使用すると、問題の解決策がすでにあるため、問題の解決策ではなく「理由」を知ることに重点を置いています。

<Style x:Key="gridCellStyle" TargetType="{x:Type DataGridCell}">
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="PeachPuff"/>
            <Setter Property="Foreground" Value="BlueViolet"/>
        </Trigger>
    </Style.Triggers>
</Style>
4

2 に答える 2

0

次のデフォルト スタイル トリガーを持つ DataGridCell のデフォルト スタイル。

<Trigger Property="IsSelected" Value="True">
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
    <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>

したがって、DataGridRow のトリガーを記述した場合、ビジュアル ツリーで DataGridCell の前に配置された要素にのみ適用されます。

したがって、選択中に背景と前景を変更するには、DataGridCell スタイルでトリガーを記述するか、スタイルからデフォルトのトリガーを削除する必要があります。

于 2014-08-05T13:02:48.207 に答える