回答編集履歴

1 修正

Zuishin

Zuishin score 25211

2018/04/13 22:35  投稿

DataGrid のいわゆるセルの選択状態には二種類あります。
一つはフォーカスが当たっている状態で、これをカレントセルと呼びます。
もう一つはユーザーによって選択マークを付けられた状態で、これを選択セルと呼びます。
この質問の場合は、タブによってカレントセルが移動し、それに伴ってカレントセルが選択されて選択セルになっている状態です。
カレントセルが移動するとセルの選択も一緒に移動するので一見同じもののように見えますが、これらは違うものです。
さらにタブを押して DataGrid からフォーカスが外れてボタンにフォーカスが移った場合、カレントセルは無くなります。
これは DataGrid のカレントセルにデータバインディングした時に必要な挙動です。
この場合、カレントセルは無くなりますが、選択セルは洗濯されたまま残ります。
この場合、カレントセルは無くなりますが、選択セルは選択されたまま残ります。
ボタンからフォーカスが戻ってきたとき、カレントセルは null なので新しく最初のセルがカレントセルになります。
しかし選択セルは前回のまま残り、カレントセルが次に移動したときにカレントセルが選択されます。
つまり、フォーカスが DataGrid に戻ってきた時にはまだ元のセルが選択されているので、カレントをそこに移動させればいいわけです。
具体的には GotFocus イベントをハンドルしてカレントセルが選択されていなければ選択セルの位置を入手し(`dataGrid01.Items.IndexOf(dataGrid01.SelectedCells[0])`)、そこをカレントにしてください。
[[WPF] DATAGRID の CURRENTCELL をコードから設定する。](https://rksoftware.wordpress.com/2016/09/26/001-52/)

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る