如何使选定的行在未聚焦的数据网格中突出显示?
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 失去焦点并且突出显示的行获得不同的选择颜色,它会保持选中的行,这在失去焦点时也会保持。
【讨论】:
以上是关于如何使选定的行在未聚焦的数据网格中突出显示?的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在 ext js 4.2 中突出显示网格面板的行和列?
选择表格行并使用 Twitter Bootstrap 保持突出显示