1

我有一个绑定到 DomainDataSource 的 DataGrid 和一个 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 更改页面时点击一次)

知道为什么会发生这种情况以及如何解决吗?我尝试在页面上放置一个不执行任何操作的随机按钮,单击它不会导致此问题,因此它似乎不仅仅是任何单击。

4

1 回答 1

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);
}

根据文档,在第一次被击中时,RemoveHandler不会造成任何问题,因为它根本没有效果。但是在第二次调用此函数时,它将删除最初注册的处理程序并简单地再次添加它。这样,您就不会只是继续建立已注册处理程序的列表。

此外,new MouseButtonEventHandler(Row_MouseLeftButtonDown)不是必需的,您可以使用Row_MouseLeftButtonDown(请参阅向文本框添加/删除处理程序)。

于 2013-08-02T05:42:26.033 回答