以下のDataGridが最初にフォーカスを取得したとき(つまり、他のコントロールがフォーカスを当てた後)、最後の行、2列目がフォーカスされ、編集されます。DataGridプログラムによって最後のセルを選択
私はDataGrid.GotFocusのハンドラを追加しましたが、それは複雑なコードだと上記の結果を得ていません。
誰もがエレガントで弾丸で保護されたソリューションを手に入れましたか?
乾杯、
Berryl
EDITS
私は、送信者は、常に私が欲しいグリッドでなければなりませんコード
- に小さな変更を加えたので、私はちょうどの代わりに頼っていることを使用しました名前
SelectionUnitがFullRowのとき、グリッドがCellOrRowHeaderに変更される前に、 ap parentlyは私がしたいプライベート無効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;
}
新しい質問
)(
をSelectedCells.Clearを呼び出すことはできませんフォーカスがウィンドウ内の別のコントロールに移動してからグリッドに戻るときに、選択を繰り返します。 私は、_hasHadInitialFocusラッチをLostFocusイベントでfalseにすることができたと考えましたが、以下のコードはセルの変更で発生しています。 紛失したフォーカスイベントをトラップする方法を知っていますか?また、ラッチをオフにする場所に同意しますか?
private void DataGridLostFocus(object sender, RoutedEventArgs e) {
_hasHadInitialFocus = false;
}
もう1つ新しい質問!
DataGridがPITAであり、有用な情報が不足しています。最良のリンク(Vin Sibal、Jamie Rodriquez)はすべて(ToolKitの一部である)本当に古いです。
本当に良い更新された参照がありますか?
あなたはおそらくDataGridLostFocusにe.NewFocus、e.OldFocus、e.OriginalSourceを見て、それらとの巧妙な何かを行うことができます。私はDataGridに関する私の情報源がおそらくあなたのものと同じであると思います。 MSDN、StackOverflow、そしてたくさんの実験。 – Phil