当下面的DataGrid首次获取焦点并且只是第一次(即,在某个其他控件获得焦点后)时,最后一行第二列应该被聚焦并进行编辑。DataGrid以编程方式选择最后一个单元
我增加了对DataGrid.GotFocus的处理程序,但它是复杂的代码,并没有得到上面的结果。
任何人都有一个优雅的防弹解决方案?
干杯,
Berryl
编辑
我做了小小的修改代码
- 发送者应该总是我想要的网格,所以我只是用依托,与其一个名字
当SelectionUnit是FullRow时,由于之前我的网格已将其更改为CellOrRowHeader,因此您需要 ap parently不能打电话SelectedCells.Clear()
私人无效OnDataGridKeyboardGotFocus(对象发件人,KeyboardFocusChangedEventArgs E) {
var dg = sender as DataGrid; if (_hasHadInitialFocus) return; var rowIndex = dg.Items.Count - 2; if (rowIndex >= 0 && dg.Columns.Count - 1 >= 0) { var column = dg.Columns[dg.Columns.Count - 1]; var item = dg.Items[rowIndex]; var dataGridCellInfo = new DataGridCellInfo(item, column); if (dg.SelectionUnit != DataGridSelectionUnit.FullRow) { dg.SelectedCells.Clear(); dg.SelectedCells.Add(dataGridCellInfo); } else { var row = dg.GetRow(rowIndex); row.IsSelected = true; } dg.CurrentCell = dataGridCellInfo; dg.BeginEdit(); } _hasHadInitialFocus = true;
}
新问题
我想当焦点转到窗口中的另一个控件然后返回到网格时重复选择。 我想我可以把那_hasHadInitialFocus锁定到虚假的LostFocus事件,但下面的代码是射击细胞的变化。 你知道我应该如何俘获失去焦点的事件更好,你是否同意是把锁住的地方吗?
private void DataGridLostFocus(object sender, RoutedEventArgs e) {
_hasHadInitialFocus = false;
}
另一个新问题!
我找到的DataGrid是一个皮塔饼和短期上有用的信息。最好的链接(Vin Sibal,Jamie Rodriquez)都很旧(当它是ToolKit的一部分时)。
你知道的任何更新后的基准是真的好?
也许你可以看看e.NewFocus,e.OldFocus,e.OriginalSource在DataGridLostFocus,做一些聪明的那些。我担心DataGrid上的信息来源可能与您的相同。 MSDN,StackOverflow和大量的实验。 – Phil 2012-03-04 09:35:52