在Windows窗体应用程序中,我们的数据网格视图有许多事件,如行鼠标双击或行点击和额外...
但是在WPF我找不到这些事件。 如何将行鼠标双击添加到我的用户控件中,其中包含数据网格
我使用数据网格鼠标双击事件的一些不好的方式做了这件事,并且以这种方式发生了一些错误但我想知道简单和标准的方式我还在 row_load 事件中向数据网格项添加了双击事件,但如果数据网格有大量来源,它似乎会使我的程序变慢
private void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.MouseDoubleClick += new MouseButtonEventHandler(Row_MouseDoubleClick);
}
答案 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
}
}
我想知道当所有行点击时我使用了这个