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>
您可以使用 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>
我在 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>
您可以使用 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>