WPF:DataGridで画面表示直後、シフトキー押下で複数選択を行いたい
調査に大分手間取ってしまったのでメモ。
1、画面表示時、DataGridにデータを表示、一行目を選択状態とする。 2、そのままShift+マウスボタン押下で複数選択をしたい
上記処理を実現が、思いのほか大変でした。
一度選択行をクリックした後であればShift+マウスクリックで複数選択可能ですが、 クリック前だと選択状態を変えようと、CurrentItemにSelectedItemを入れても、 DataGridRowやDataGridCellにフォーカスを当ててもうまくいきませんでした。
最終的に、下記サイトを参考にする形で解決しました。
http://www.resolvinghere.com/sm/wpf-datagrid-multiple-selection-problem.shtml
Publicではないメソッド、HandleSelectionForCellInputを実行することでクリック後に近い状態を実現できた模様です。
private void Window_ContentRendered(object sender, EventArgs e) { DataGridRow row = test.ItemContainerGenerator.ContainerFromIndex(0) as DataGridRow; if (row != null) { DataGridCell cell = GetCell(test, row, 0); if (cell != null) { row.Focusable = true; row.IsSelected = true; row.Focus(); //↑選択状態の変更やフォーカスのセットだけでなく、 //↓下記メソッドを実行する必要がある var method = typeof(DataGrid).GetMethod("HandleSelectionForCellInput", BindingFlags.Instance | BindingFlags.NonPublic); method.Invoke(test, new object[] { cell, false, false, false }); } } }