C#WPF / XAML预览DataGrid的鼠标事件

时间:2015-01-16 19:06:19

标签: c# wpf datagrid event-handling

我在Visual Studio 2013中使用带有c#/ xaml的WPF DataGrid。

使用SelectionMode ="扩展",我能够在网格中多选行。

我要求相对于行选择忽略网格中某列的点击。

我设置了一个被调用的PreviewMouseLeftButtonDown事件。 由于它是预览事件,因此在处理事件时,网格中的选择尚未更改。 我能够确定点击的行和列,因此我可以确定在我不想要的列中进行了点击

我希望能够在此时中止点击事件,以便不对网格中当前选定的项目进行任何更改。这可能吗?

在鼠标按下事件中我尝试了类似的事情:

    private void GridCtrl_MouseDown(object sender, MouseButtonEventArgs e)
    {
          // ... Other code
          e.Handled = true;
    }

但是,尽管被标记为已处理,但它仍然继续并执行行选择。 我还有一个' SelectionChanged'我看到它后来进入的事件。

1 个答案:

答案 0 :(得分:0)

我认为你实际上需要处理两个隧道事件 - 一个用于PreviewLeftMOuseButtonDown,另一个用于PreviewSelectionChanged。

我的建议是创建一个标志,让我们称之为:

bool _cancelSelectionChange = false;

然后,在鼠标处理程序中:

private void GridCtrl_MouseDown(object sender, MouseButtonEventArgs e)
{
      _cancelSelectionChange = false;

      // ... Other code
      _cancelSelectionChange = true;
      e.Handled = true;
}

最后,在隧道事件的选择更改处理程序中:

private void GridCtrl_PreviewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    e.Handled = _cancelSelectionChange;
}