WPF 中的标签 XAML DataGridTemplateColumn 非活动选择样式

Label in WPF XAML DataGridTemplateColumn inactive selection style

我在 DataGridTemplateColumn 中有一个标签,我正在使用触发器来确保选中行时前景为白色(蓝色)。 当行被选中但数据网格没有获得焦点时,它仍然是白色的;这是有道理的,因为它仍然被选中。

但我想在 IsSelected 和网格不活动时使前景变黑。

这是样式和栏目

感谢您的帮助。

 <Style x:Key="DataGridLabelStyle" TargetType="Label" BasedOn="{StaticResource DataGridControlStyle}" >
                    <Setter Property="Foreground" Value="Black" />

                    <Style.Triggers>
                        <DataTrigger Value="True">
                            <DataTrigger.Binding >
                                <MultiBinding Converter="{StaticResource BooleanAndConverter}">
                                    <Binding Path="IsSelected" RelativeSource="{RelativeSource AncestorType={x:Type DataGridRow}}" />
                                    <Binding Path="IsKeyboardFocused" RelativeSource="{RelativeSource AncestorType={x:Type DataGrid}}" Converter="{StaticResource NegateBooleanConverter}" />
                                </MultiBinding>
                            </DataTrigger.Binding>
                            <Setter Property="Foreground" Value="White" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>

                <DataGridTemplateColumn Header="Date">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Label Content="{Binding TransactionDate}" Style="{StaticResource DataGridLabelStyle}" ContentStringFormat="yyyy-MM-dd" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <DatePicker SelectedDate="{Binding TransactionDate}"  />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
                </DataGridTemplateColumn>

您可以使用 MultiDataTriggerCondition 绑定到 Selector.IsSelectionActive 附加 属性 父 DataGridCell:

<Style x:Key="DataGridLabelStyle" TargetType="Label">
    <Setter Property="Foreground" Value="Black" />
    <Style.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions >
                <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type DataGridCell}}}" Value="True" />
                <Condition Binding="{Binding (Selector.IsSelectionActive), RelativeSource={RelativeSource AncestorType={x:Type DataGridCell}}}" Value="True" />
            </MultiDataTrigger.Conditions>
            <Setter Property="Foreground" Value="White" />
        </MultiDataTrigger>
    </Style.Triggers>
</Style>