为什么我的DataPager导致多个MouseButtonUp事件被抛出?

时间:2013-08-02 05:10:26

标签: c# silverlight

我有一个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更改页面)

知道为什么会发生这种情况以及如何解决这个问题?我尝试在页面上放置一个没有做任何事情的随机按钮,点击它不会导致这个问题,所以它似乎不是任何点击。

1 个答案:

答案 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)。