C# WPF DataGridCell样式CurrentItem

C# WPF DataGridCell样式CurrentItem,c#,wpf,datagrid,C#,Wpf,Datagrid,是否有方法触发当前行/项的样式? 如果只选择了一行,则此 <Trigger Property="DataGridCell.IsSelected" Value="True"> 行,但是如果选择了多行呢。我只想设置属于当前项目的单元格/行标题的样式。使用“属于当前项目的单元格”我猜您是指当前关注的行? 有两种不同类型的“选择”。 一个是选择它自己(由IsSelected属性指示),它指示选择DataGrid。这意味着,选中的每一行(或者只有一行,如果不允许多行)。 第二个是聚焦的单

是否有方法触发当前行/项的样式? 如果只选择了一行,则此

<Trigger Property="DataGridCell.IsSelected" Value="True">

行,但是如果选择了多行呢。我只想设置属于当前项目的单元格/行标题的样式。

使用“属于当前项目的单元格”我猜您是指当前关注的行? 有两种不同类型的“选择”。 一个是选择它自己(由
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>
上面的示例演示了如何向整行添加行为。请注意,单元格背景始终位于行背面的前面。如果同时需要单元格和行背景(因此无法使用透明单元格背景),则需要使用
多数据绑定
,其中排除相应的行状态。比方说,需要行的
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>


不要忘记,当您有多个触发器为true时,将使用列表中的最后一个触发器。这意味着,如果您在第一个示例中更改触发器的顺序,您将看不到从选定单元格到聚焦单元格的任何差异。

您认为什么项目是最新的?DataGrid.CurrentItem:在DataGrid对象上调用CurrentItem时得到的行。我希望整行着色,但触发器(IsKeyboardFocusInner)是他不适合我。至少不在DataGridRow上。在DataGridCell上确实如此。当我将单元格的背景设置为透明时,我看到了样式化的行,但没有看到选择突出显示。好的,我用一个示例更新了文章,以排除单元格样式上的行条件。不要忘记,您只能在
多重绑定
的条件下使用直接属性名,并且只能在
多重数据绑定
的条件下使用绑定。
<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>