【发布时间】:2011-11-16 11:05:15
【问题描述】:
我想出了如何突出显示感兴趣的行。我可以获取我感兴趣的列的索引并使用 ScrollIntoView 跳转到它。但是,它不会立即向用户弹出。我想突出显示该列,或更改 ColumnHeaderStyle。我似乎无法弄清楚如何在 xaml 或后面的代码中做到这一点。
另一种选择是不突出显示整个行和列标题,而只突出感兴趣的单元格。我宁愿那样做,但想不通。
我当前的 DataGrid 如下所示:
<DataGrid x:Name="dtGridReads" AutoGenerateColumns="False"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode ="Standard"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
ScrollViewer.IsDeferredScrollingEnabled="True"
CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="True"
ItemsSource ="{Binding}" Block.TextAlignment="Center"
AlternatingRowBackground="#F1F1F1" RowBackground="White"
CanUserAddRows="False" CanUserDeleteRows="False" FrozenColumnCount="1"
GridLinesVisibility="None" ScrollViewer.ScrollChanged="dtGridReads_ScrollChanged">
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="Background" Value="red" />
<Setter Property="BorderThickness" Value="0" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
我的代码:
public void ShowSelectedCell(int row, int column)
{
//dtGridReads.SelectedItem = dtGridReads.Items[row];
//dtGridReads.SelectedItem = dtGridReads.Columns[column];
//dtGridReads.CurrentColumn = dtGridReads.Columns[column];
dtGridReads.ScrollIntoView(dtGridReads.Items[row], dtGridReads.Columns[column]);
}
谢谢。
【问题讨论】:
-
将
Background更改为DataGridColumnHeader的工作量很大,因为您需要重新构建样式。不确定这是否是您想要的,但您是否尝试在DataGrid上设置SelectionUnit="CellOrRowHeader"? -
@Meleak,我会为选定的列使用什么触发器?
-
不确定我是否正确理解了您的问题,但我发布了关于如何在选择
DataGridColumn时使用触发器的答案(意味着选择了列中的一个单元格) -
那我完全不明白你的问题。您的标题说根据
DataGrid中的选择更改ColumnHeaderStyle,而我的回答恰恰表明了这一点。也许上传一张图片显示你想要做什么。你想在你滚动到的单元格的中心做一个“红十字”吗?