我有一个wpf数据网格,其中SelectionUnit设置为“CellOrRowHeader”,SelectionMode设置为“Extended”。
<DataGrid SelectionUnit="Cell" SelectionMode="Extended" Name="myDataGrid">
CurrentCellChanged="onCurrentCellChanged"
</DataGrid>
在onCurrentCellChanged中我尝试将选择更改为另一个单元格:
private void onCurrentCellChanged(object sender, EventArgs e)
{
DataGridCell cell = DataGridHelper.GetCell(myDataGrid, 3, 3);
cell.IsSelected = true;
cell.Focus();
}
GetCell是一个辅助函数。我验证了单元格不为空,并执行代码。但是,我只看到单元格{3,3}被聚焦(带有黑色边框),但没有突出显示(没有蓝色背景)。
奇怪的是,如果我调用相同的代码,而不是调用onCurrentCellChanged事件回调,则单元格{3,3}会突出显示。
有人知道原因吗?非常感谢!
答案 0 :(得分:0)
除了&#34; CurrentCellChanged&#34;,还有另一个事件&#34; SelectedCellsChanged&#34;行为不同。经过一些测试,我发现这两个事件有不同的用途。例如,在某些情况下,&#34; CurrentCellChanged&#34;即使选择未更改,也会被调用。虽然这超出了这个答案的范围......
回到主题,我设法通过操纵SelectedCellsChanged事件回调中的单元格选择来解决问题。但有一些技巧:
更改标记:
<DataGrid SelectionUnit="Cell" SelectionMode="Extended" Name="myDataGrid">
SelectedCellsChanged="onSelectedCellsChanged"
</DataGrid>
这是处理程序:
private void onSelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
// trick: Since the code below change the cell selection, which may
// cause this handler to be called recursively, I need to do some filter
// If myDataGrid.CurrentCell != e.AddedCells.First(), return
// Here we can change cell selection
DataGridCell cell = DataGridHelper.GetCell(myDataGrid, 3, 3);
cell.IsSelected = true;
}