默认行为是使用CTRL +单击以取消选择数据网格中的项目
我希望能够鼠标点击(左或右按钮)网格中的空白,并取消选择任何选定的项目。
我用Google搜索了它并发现了一些非常复杂的变通方法,但我希望能找到一个简单的解决方案。
编辑:
我现在正在使用listview,但仍未找到解决方案。虽然因为它们的风格更好,但是对于列表视图来说稍微不那么烦人。
答案 0 :(得分:14)
我有同样的问题并找到了解决方案。这应该建立在行为中:
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;
}
}
}
}
答案 1 :(得分:3)
一个简单的
<DataGrid MouseDown="DataGrid_MouseDown">
不是你想要的?
private void DataGrid_MouseDown(object sender, MouseButtonEventArgs e)
{
(sender as DataGrid).SelectedItem = null;
}
唯一的缺点是所选项目上没有CTRL的点击也会取消选择。
答案 2 :(得分:0)
我不确定你是指白色空间还是灰色空间。在后一种情况下,以下工作:
private void dataViewImages_MouseUp(object sender, MouseEventArgs e)
{
DataGridView.HitTestInfo hit = dataViewImages.HitTest(e.X, e.Y);
if (hit.Type != DataGridViewHitTestType.Cell)
dataViewImages.ClearSelection();
}
这是我用来通过点击灰色空间取消选择所有单元格。
答案 3 :(得分:0)
private void dg_IsKeyboardFocusWithinChanged
(object sender, DependencyPropertyChangedEventArgs e)
{
if (dg.SelectedItem != null) {
dg.UnselectAll();
}
}
答案 4 :(得分:0)
如果您有SelectionUnit="FullRow"
,则必须使用UnselectAllCells()
代替UnselectAll()
。