2

Windowsフォームアプリケーションでは、データグリッドビューに行マウスのダブルクリックや行クリックなどのイベントがたくさんあります...

しかし、WPFではこれらのイベントを見つけることができません。データグリッドが含まれているユーザーコントロールに行マウスのダブルクリックを追加するにはどうすればよいですか?

データグリッドマウスのダブルクリックイベントを使用して、この方法でいくつかのバグが発生したという悪い方法でそれを行いましたが、単純で標準的な方法を知りたいです

また、 row_loadイベントのデータグリッドアイテムにダブルクリックイベントを追加しますが、データグリッドに大きなソースがある場合、プログラムが遅くなるようです

private void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
{
    e.Row.MouseDoubleClick += new MouseButtonEventHandler(Row_MouseDoubleClick);
}
4

2 に答える 2

7

DataGrid要素をダブルクリックしてから、イベントソースを調べて、クリックされた行と列を見つけることができます。

private void DataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    DependencyObject dep = (DependencyObject)e.OriginalSource;

    // iteratively traverse the visual tree
    while ((dep != null) && !(dep is DataGridCell) && !(dep is DataGridColumnHeader))
    {
        dep = VisualTreeHelper.GetParent(dep);
    }

    if (dep == null)
        return;

    if (dep is DataGridColumnHeader)
    {
        DataGridColumnHeader columnHeader = dep as DataGridColumnHeader;
        // do something
    }

    if (dep is DataGridCell)
    {
        DataGridCell cell = dep as DataGridCell;
        // do something
    }
}

これについては、私が書いたこのブログ投稿で詳しく説明しています。

于 2012-05-05T05:56:20.817 に答える
0

コリンの答えは本当に良かったし、うまくいきました...私もこのコードを使用しています。これは私にとって役に立ち、他の人と共有したいと思っています。

private void myGridView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            DependencyObject dep = (DependencyObject)e.OriginalSource;

            // iteratively traverse the visual tree
            while ((dep != null) && !(dep is DataGridRow) && !(dep is DataGridColumnHeader))
            {
                dep = VisualTreeHelper.GetParent(dep);
            }

            if (dep == null)
                return;

            if (dep is DataGridRow)
            {
                DataGridRow row = dep as DataGridRow;
               //here i can cast the row to that class i want 
            }
        }

すべての行がクリックされたときに知りたいので、これを使用しました

于 2012-05-05T13:38:43.830 に答える