C# WPF/XAML Preview Mouse Event for DataGrid



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

使用选择模式="扩展",我可以在网格中多选行。

我有一个要求,相对于行选择,对网格一列的单击将被忽略。

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

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

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

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

但是,尽管被标记为已处理,它仍然继续并执行行选择。我还有一个"选择已更改"事件,我看到它稍后会进入。

我认为您实际上需要处理两个隧道事件 - 一个用于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;
}

相关内容

  • 没有找到相关文章

最新更新