Метка в неактивном стиле выбора WPF XAML DataGridTemplateColumn - PullRequest
1 голос
/ 15 апреля 2020

У меня есть метка в 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>

1 Ответ

0 голосов
/ 15 апреля 2020

Вы можете использовать MultiDataTrigger с Condition, который связывается с 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>
...