我在Visual Studio 2013中使用带有c#/ xaml的WPF DataGrid。
使用SelectionMode ="扩展",我能够在网格中多选行。
我要求相对于行选择忽略网格中某列的点击。
我设置了一个被调用的PreviewMouseLeftButtonDown事件。 由于它是预览事件,因此在处理事件时,网格中的选择尚未更改。 我能够确定点击的行和列,因此我可以确定在我不想要的列中进行了点击
我希望能够在此时中止点击事件,以便不对网格中当前选定的项目进行任何更改。这可能吗?
在鼠标按下事件中我尝试了类似的事情:
private void GridCtrl_MouseDown(object sender, MouseButtonEventArgs e)
{
// ... Other code
e.Handled = true;
}
但是,尽管被标记为已处理,但它仍然继续并执行行选择。 我还有一个' SelectionChanged'我看到它后来进入的事件。
答案 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;
}