有没有办法在当前行/项上触发样式?如果只选择了一行,则此
<Trigger Property="DataGridCell.IsSelected" Value="True">有效,但如果选择了多个行怎么办。我只想设置属于当前项目的单元格/箭头的样式。
发布于 2015-09-26 20:08:37
对于“属于当前项的单元格”,我猜您指的是当前聚焦的行?有两种不同类型的“选择”。一个是它本身的选择(由IsSelected属性指示),它指示对DataGrid的选择。这意味着,选择的每一行(如果不允许多行,则只有一行)。第二个是聚焦的单元格或行(由IsFocused属性指示),它不用于网格的数据行为,而是用于图形选择,或者您所称的“当前”行或单元格。
您可以使用以下几个属性:
<Style x:Key="cellstyle" TargetType="DataGridCell">
<Setter Property="Background" Value="Transparent"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Blue"/>
</Trigger>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>第一个命令会更改每个选定的单元格(如果您通过按住shift键来选择它们)。第二个只更改“当前”单元格。
如果需要对"current“单元格的整行执行此操作,则可以使用该行的IsKeyboardFocusWithin属性执行此操作:
<Style x:Key="rowstyle" TargetType="DataGridRow">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Yellow" />
</Trigger>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="Background" Value="Purple" />
</Trigger>
</Style.Triggers>
</Style>上面的例子演示了如何向整行添加行为。请注意,单元格背景始终位于行背景的前面。如果您需要同时拥有单元格和行背景(因此您不能使用透明的单元格背景),则需要使用MultiDataBinding,您可以在其中排除相应的行状态。假设一个条件需要行的IsKeyboardFocusWithin为false:
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsKeyboardFocusWithin, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}}" Value="False"/>
<Condition Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=Self}}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Blue"/>
</MultiDataTrigger>不要忘记,当您有多个触发器为真时,将采用列表中的最后一个触发器。这意味着,如果您更改了第一个示例中触发器的顺序,您将看不到从选定单元格到聚焦单元格的任何区别。
https://stackoverflow.com/questions/32796073
复制相似问题