我有一个DataGrid和一个绑定到DomainDataSource的DataPager。那部分工作正常。问题是,我有一个函数来处理双击DataGridRow
private void dataGrid_list_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.AddHandler(Control.MouseLeftButtonDownEvent, new MouseButtonEventHandler(Row_MouseLeftButtonDown), true);
}
Row_MouseLeftButtonDown的实际逻辑并不重要。它工作正常,除了我使用DataPager点击另一个页面。现在我显示我有两个鼠标点击同时触发(当它不应该触发我的双击)。如果我点击四个页面,当我点击一行时我会注册五次点击(一次用于行点击,我猜每次点击一次用DataPager更改页面)
知道为什么会发生这种情况以及如何解决这个问题?我尝试在页面上放置一个没有做任何事情的随机按钮,点击它不会导致这个问题,所以它似乎不是任何点击。
答案 0 :(得分:1)
每次调用dataGrid_list_LoadingRow
时都会注册该事件,只要您点击其他页面,就必须进行此事件。
private void dataGrid_list_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.RemoveHandler(Control.MouseLeftButtonDownEvent, Row_MouseLeftButtonDown);
e.Row.AddHandler(Control.MouseLeftButtonDownEvent, Row_MouseLeftButtonDown, true);
}
根据the documentation,第一次点击时,RemoveHandler
不会造成任何问题,因为它根本没有效果。但是在第二次触发此函数时,它将删除最初注册的处理程序并再次添加它。这样,您不仅可以继续构建已注册的处理程序列表。
此外,new MouseButtonEventHandler(Row_MouseLeftButtonDown)
不是必需的,您可以使用Row_MouseLeftButtonDown
(请参阅Add/Remove handler to textbox)。