如何使选定的行在未聚焦的数据网格中突出显示?

Posted

技术标签:

【中文标题】如何使选定的行在未聚焦的数据网格中突出显示?【英文标题】:How do I make the selected row highlighted in an unfocused datagrid? 【发布时间】:2014-02-15 19:35:20 【问题描述】:

我有一个正在执行文本搜索的数据网格。当搜索确定应该突出显示该行时,我在基础对象中为“true”分配一个布尔值,并且在我的 WPF xml 中我有以下内容:

        <DataGrid.Style>
            <Style TargetType="DataGrid">
                <Setter Property="AlternatingRowBackground" Value="LightGray"/>
            </Style>
        </DataGrid.Style>
        <DataGrid.RowStyle>
            <Style TargetType="DataGridRow">
                <Style.Triggers>
                    <DataTrigger Binding="Binding Highlighted, Mode=TwoWay" Value="True">
                        <Setter Property="Background" Value="Yellow" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>

注意“绑定突出显示”;这就是突出显示行的方式。这似乎工作正常,除非在数据网格中选择了一行。发生这种情况时,当数据网格失去焦点时,选定的行将变为灰色。当数据网格失去焦点时,如何指定 SELECTED ROW 的行颜色(意思是“突出显示”为真),因此仍显示黄色(可能更暗,因此很明显它已被选中)?

【问题讨论】:

【参考方案1】:

试试这个:

            <DataGrid.Style>
            <Style TargetType="DataGrid">
                <Setter Property="AlternatingRowBackground" Value="LightGray"/>
            </Style>
        </DataGrid.Style>
        <DataGrid.RowStyle>
            <Style TargetType="DataGridRow">
                <Style.Triggers>
                    <DataTrigger Binding="Binding Highlight" Value="True">
                        <Setter Property="Background" Value="Yellow" />
                    </DataTrigger>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="#FF3CF1C8" />
                        <Setter Property="BorderBrush" Value="#FF3CF1C8" />
                    </Trigger>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="Binding IsSelected, RelativeSource=RelativeSource Mode=Self" Value="True"/>
                            <Condition Binding="Binding Highlight" Value="True"/>
                        </MultiDataTrigger.Conditions>
                        <Setter Property="Background" Value="#FFFBAE8A" />
                        <Setter Property="BorderBrush" Value="#FFFBAE8A" />
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
        <DataGrid.CellStyle>
            <Style TargetType="DataGridCell">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="#FF3CF1C8" />
                        <Setter Property="BorderBrush" Value="#FF3CF1C8" />
                    </Trigger>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="Binding IsSelected, RelativeSource=RelativeSource Mode=FindAncestor, AncestorType=x:Type DataGridRow" Value="True"/>
                            <Condition Binding="Binding Highlight" Value="True"/>
                        </MultiDataTrigger.Conditions>
                        <Setter Property="Background" Value="#FFFBAE8A" />
                        <Setter Property="BorderBrush" Value="#FFFBAE8A" />
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.CellStyle>

如果 DataGrid 失去焦点并且突出显示的行获得不同的选择颜色,它会保持选中的行,这在失去焦点时也会保持。

【讨论】:

以上是关于如何使选定的行在未聚焦的数据网格中突出显示?的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 ag-grid 滚动到选定/突出显示的行位置

我们如何在 ext js 4.2 中突出显示网格面板的行和列?

选择表格行并使用 Twitter Bootstrap 保持突出显示

如何在没有焦点的情况下突出显示/选择 wpf 文本框中的文本?

如何使 emacs 突出显示超过 80 个字符的行?

如何突出显示和检测 CSS 网格行上的鼠标点击?