默认行为是使用 CTRL+单击取消选择 Datagrid 中的项目
我希望能够用鼠标单击(左键或右键)网格中的空白并让它取消选择任何选定的项目。
我已经用谷歌搜索了它并发现了一些非常复杂的解决方法,但我希望有一个简单的解决方案。
编辑:
我现在改用列表视图,但仍然没有找到解决方案。列表视图稍微不那么烦人,因为它们的样式更好。
我有同样的问题并找到了解决方案。这应该建立在行为中:
private void dataGrid1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (sender != null)
{
DataGrid grid = sender as DataGrid;
if (grid != null && grid.SelectedItems != null && grid.SelectedItems.Count == 1)
{
DataGridRow dgr = grid.ItemContainerGenerator.ContainerFromItem(grid.SelectedItem) as DataGridRow;
if (!dgr.IsMouseOver)
{
(dgr as DataGridRow).IsSelected = false;
}
}
}
}
一个简单的
<DataGrid MouseDown="DataGrid_MouseDown">
是不是你想要的?
private void DataGrid_MouseDown(object sender, MouseButtonEventArgs e)
{
(sender as DataGrid).SelectedItem = null;
}
唯一的缺点是在没有 CTRL 的情况下单击所选项目也会取消选择。
我不确定你是指空白还是灰色空间。在后一种情况下,以下工作:
private void dataViewImages_MouseUp(object sender, MouseEventArgs e)
{
DataGridView.HitTestInfo hit = dataViewImages.HitTest(e.X, e.Y);
if (hit.Type != DataGridViewHitTestType.Cell)
dataViewImages.ClearSelection();
}
这就是我用来通过单击灰色空间来取消选择所有单元格的方法。
private void dg_IsKeyboardFocusWithinChanged
(object sender, DependencyPropertyChangedEventArgs e)
{
if (dg.SelectedItem != null) {
dg.UnselectAll();
}
}
如果你有SelectionUnit="FullRow"
你必须UnselectAllCells()
改用UnselectAll()
.