WPF Datagrid - 在DataGrid中单击空格时取消选择所选项

时间:2012-05-19 16:32:53

标签: c# wpf datagrid

默认行为是使用CTRL +单击以取消选择数据网格中的项目

我希望能够鼠标点击(左或右按钮)网格中的空白,并取消选择任何选定的项目。

我用Google搜索了它并发现了一些非常复杂的变通方法,但我希望能找到一个简单的解决方案。

编辑:

我现在正在使用listview,但仍未找到解决方案。虽然因为它们的风格更好,但是对于列表视图来说稍微不那么烦人。

5 个答案:

答案 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()