我在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;
}