如何添加鼠标双击数据网格项wpf

时间:2012-05-05 05:18:06

标签: wpf

在Windows窗体应用程序中,我们的数据网格视图有许多事件,如行鼠标双击或行点击和额外...

但是在WPF我找不到这些事件。 如何将行鼠标双击添加到我的用户控件中,其中包含数据网格

我使用数据网格鼠标双击事件的一些不好的方式做了这件事,并且以这种方式发生了一些错误但我想知道简单和标准的方式

我还在 row_load 事件中向数据网格项添加了双击事件,但如果数据网格有大量来源,它似乎会使我的程序变慢

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

2 个答案:

答案 0 :(得分: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
    }
}

我在this blog post that I wrote中详细描述了这一点。

答案 1 :(得分: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 
            }
        }

我想知道当所有行点击时我使用了这个