C#のWPFでDataGridの選択行をダブルクリックする

WPFのDataGridコントロールで、ダブルクリックした時に何か処理する事を考える。

 

DataGridクラスはMouseDoubleClickイベントを持っているので、それを使えば良さそうだが、

ダブルクリックした場所が、ヘッダー部分でもスクロールバーでもこのイベントが呼び出される。

 

 

ダブルクリックされた場所が、選択されている行であるかを判断してから該当の処理をする事を考える。

以下は、MouseDoubleClickのイベントハンドラー。(TestGridというのがDataGridコントロール)

コード

        private void TestGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (null != TestGrid.SelectedItem)
            {
                var ctrl = TestGrid.ItemContainerGenerator.ContainerFromItem(TestGrid.SelectedItem) as DataGridRow;
                if (null != ctrl)
                {
                    if (null != ctrl.InputHitTest(e.GetPosition(ctrl)))
                    {
                        MessageBox.Show("選択行をダブルクリックしました");
                    }
                }
            }
        }

 

選択されているItemを取得 (3行目)

SelectedItemプロパティから選択されているItemを取得する。

選択されていない場合はnullになる。

 

 

Itemに紐付くコントロールを取得 (5行目)

ItemContainerGeneratorのContainerFromItemメソッドでItemからコントロールを取得出来る。

 

 

マウスの位置がコントロールの中か確認 (8行目)  

MouseButtonEventArgsのGetPositionメソッドを使って、マウス座標をコントロールから見た相対的な値へ変換し、コントロールのInputHitTestメソッドを使って中か外かを判断する。