Single click edit in WPF DataGrid

前端 未结 11 1586
野的像风
野的像风 2020-11-27 10:47

I want the user to be able to put the cell into editing mode and highlight the row the cell is contained in with a single click. By default, this is double click.

H

11条回答
  •  悲&欢浪女
    2020-11-27 11:23

    The answer from Micael Bergeron was a good start for me to find a solution thats working for me. To allow single-click editing also for Cells in the same row thats already in edit mode i had to adjust it a bit. Using SelectionUnit Cell was no option for me.

    Instead of using the DataGridCell.Selected Event which is only fired for the first time a row's cell is clicked, i used the DataGridCell.GotFocus Event.

    
    

    If you do so you will have always the correct cell focused and in edit mode, but no control in the cell will be focused, this i solved like this

    private void DataGrid_CellGotFocus(object sender, RoutedEventArgs e)
    {
        // Lookup for the source to be DataGridCell
        if (e.OriginalSource.GetType() == typeof(DataGridCell))
        {
            // Starts the Edit on the row;
            DataGrid grd = (DataGrid)sender;
            grd.BeginEdit(e);
    
            Control control = GetFirstChildByType(e.OriginalSource as DataGridCell);
            if (control != null)
            {
                control.Focus();
            }
        }
    }
    
    private T GetFirstChildByType(DependencyObject prop) where T : DependencyObject
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(prop); i++)
        {
            DependencyObject child = VisualTreeHelper.GetChild((prop), i) as DependencyObject;
            if (child == null)
                continue;
    
            T castedProp = child as T;
            if (castedProp != null)
                return castedProp;
    
            castedProp = GetFirstChildByType(child);
    
            if (castedProp != null)
                return castedProp;
        }
        return null;
    }
    

提交回复
热议问题