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

Colin 的答案非常好并且有效……我也使用此代码,这对我很有帮助,并希望与其他人分享。

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 回答