1

UI コントロールの通常の規則では、選択したテキスト、アイテム、または行は、親コントロールがフォーカスされている場合は明るい色 (明るい青など) になり、コントロールがフォーカスされていない場合は彩度が低く/暗くなります (淡い青など)。

とは対照的にListView/GridView、WPFDataGridコントロールは既定ではこの規則に従いません。同じウィンドウ内の別のコントロールが明らかにフォーカスされている場合でも、選択した行は明るく表示されます。

これは、焦点が合っていない場合DataGridCellに背景を設定するトリガーを に追加するだけでよいと思いますが、チェックするプロパティがわかりません。私が望むもののように聞こえましたが、それはうまくいきません。どちらも機能しないようです。{DynamicResource {x:Static SystemColors.ControlBrushKey}}DataGridIsFocusedIsMouseCaptured

私が試した最新のトリガーは次のとおりです。

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition
            Binding="{Binding IsSelected}"
            Value="True" />
        <Condition
            Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=wt:DataGrid}, Path=IsFocused}"
            Value="False"/>
    </MultiDataTrigger.Conditions>
    <Setter
        Property="BorderBrush"
        Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
    <Setter
        Property="Background"
        Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
    <Setter
        Property="Foreground"
        Value="Gray" />
</MultiDataTrigger>

セルが選択され、親コントロールがフォーカスされていないときに、このトリガーでセルを暗くするにはどうすればよいですか?

4

2 に答える 2

2

まあ、それは怪物ですが、うまくいくようです:

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition
            Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=wt:DataGridRow}, Path=IsSelected}"
            Value="True" />
        <Condition
            Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=wt:DataGrid}, Path=IsKeyboardFocusWithin}"
            Value="True" />
    </MultiDataTrigger.Conditions>
    <Setter
        Property="BorderBrush"
        Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
    <Setter
        Property="Background"
        Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
    <Setter
        Property="Foreground"
        Value="Black" />
</MultiDataTrigger>
<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition
            Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=wt:DataGridRow}, Path=IsSelected}"
            Value="True" />
        <Condition
            Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=wt:DataGrid}, Path=IsKeyboardFocusWithin}"
            Value="False" />
    </MultiDataTrigger.Conditions>
    <Setter
        Property="BorderBrush"
        Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
    <Setter
        Property="Background"
        Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
    <Setter
        Property="Foreground"
        Value="Gray" />
</MultiDataTrigger>
于 2009-10-21T02:03:51.573 に答える
0

私のコードの一部から引っ張る: これは、ツリービューがフォーカスされていないときのツリービュー項目の背景のトリガーです。

                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsSelected" Value="true"/>
                                <Condition Property="IsSelectionActive" Value="false"/>
                            </MultiTrigger.Conditions>
                            <Setter Property="Background" TargetName="SelectBorder">
                                <Setter.Value>
                                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                        <GradientStop Color="#939F90" Offset="0"/>
                                        <GradientStop Color="#BCC4BA" Offset="1"/>
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
                        </MultiTrigger>

IsSelectionActive が重要な条件だと思います...

于 2009-10-21T01:10:51.417 に答える