单击行时未引发 Silverlight DataGrid MouseLeftButtonDown 事件

标签 silverlight silverlight-4.0 datagrid event-handling

注意:我已经找到了我的问题的解决方案,所以我将其发布以供引用,尽管我很乐意接受更好的解决方案。

我试图通过连接到 UIElement.MouseLeftButtonDown 来在 Silverlight DataGrid 上提供双击功能但是当我使用 XAML 或 DataGrid.MouseLeftButtonDown += 语法订阅 DataGrid.MouseLeftButtonDown 时,当我单击 DataGrid 中的行时不会调用我的事件处理程序。如果我单击标题,则会引发事件。

如果我在父 UserControl 级别订阅相同的事件,事件处理程序将如您预期的那样成功调用,基于 Silverlight RoutedEvents但随后我必须检测点击是发生在 DataGrid 上还是其他地方。

如果我使用这个 UIElement.AddHandler 订阅事件语法,如下所示,然后它会根据 handledEventsToo: true 参数按预期工作。

dataGrid.AddHandler(UIElement.MouseLeftButtonDownEvent, 
                    new MouseButtonEventHandler(dataGrid_MouseLeftButtonDown)
                    , handledEventsToo: true);

似乎 DataGrid 实现将这些事件标记为已处理,防止事件冒泡,默认情况下在其中一个子 UIElement 中,这不是我最初期望的。经过更多思考,我可以看到点击行为驱动了各种各样的事情(选择项目、编辑字段等),所以也许实现是有意义的。

最佳答案

我遇到了同样的问题,我使用了触发事件的 MouseLeftButtonUp,但点击计数值始终为 1。

解决方法如下:

private const int MOUSE_SENSITIVITY = 300;

private DateTime _previousClick;

private void exceptionsDataGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
        DataGrid dg = (sender as DataGrid);
        DateTime current=DateTime.Now;
        LoggerService.Exception exception = (LoggerService.Exception)dg.SelectedItem;
        if (_previousClick != null)
        {
            TimeSpan clickSpan = current - _previousClick;
            if (clickSpan.TotalMilliseconds < MOUSE_SENSITIVITY)
            {
                MessageBox.Show("You double clicked!");
            }
        }
        _previousClick = current;
}

关于单击行时未引发 Silverlight DataGrid MouseLeftButtonDown 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9222686/

相关文章:

silverlight - RIA 服务 - Silverlight 4.0 - 从代码访问实体

silverlight - 在 Silverlight 中使用 ItemsControl 获得 UI 虚拟化

c# - Entity Framework 中 DataGrid (WPF) 的优雅过滤

c# - 将 Datagrid 背景设置为交替背景色

silverlight - 关于 Expression Blend 2 中的 WPF 不支持 UserControl 的错误

wpf - XAML 中的子元素

c# - 在 Silverlight 中使用字符串作为数据表单的数据模板时的事件处理程序

wpf - 我们可以在数据绑定(bind)中连接两个属性吗?

c# - 使用Caliburn Micro在WPF中更新DataGrid

silverlight - Silverlight 3 中的自动选项卡