Browse Source

Merge pull request #11012 from AvaloniaUI/fix-datagrid-edit-cell

Backport WCT fix for editing DataGrid
pull/11020/head
Dan Walmsley 3 years ago
committed by GitHub
parent
commit
311df96fd3
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 28
      src/Avalonia.Controls.DataGrid/DataGrid.cs

28
src/Avalonia.Controls.DataGrid/DataGrid.cs

@ -3962,6 +3962,7 @@ namespace Avalonia.Controls
bool focusLeftDataGrid = true; bool focusLeftDataGrid = true;
bool dataGridWillReceiveRoutedEvent = true; bool dataGridWillReceiveRoutedEvent = true;
Visual focusedObject = FocusManager.Instance.Current as Visual; Visual focusedObject = FocusManager.Instance.Current as Visual;
DataGridColumn editingColumn = null;
while (focusedObject != null) while (focusedObject != null)
{ {
@ -3974,22 +3975,29 @@ namespace Avalonia.Controls
// Walk up the visual tree. If we hit the root, try using the framework element's // Walk up the visual tree. If we hit the root, try using the framework element's
// parent. We do this because Popups behave differently with respect to the visual tree, // parent. We do this because Popups behave differently with respect to the visual tree,
// and it could have a parent even if the VisualTreeHelper doesn't find it. // and it could have a parent even if the VisualTreeHelper doesn't find it.
Visual parent = focusedObject.GetVisualParent(); var parent = focusedObject.Parent as Visual;
if (parent == null) if (parent == null)
{ {
if (focusedObject is Control element) parent = focusedObject.GetVisualParent();
{ }
parent = element.VisualParent; else
if (parent != null) {
{ dataGridWillReceiveRoutedEvent = false;
dataGridWillReceiveRoutedEvent = false;
}
}
} }
focusedObject = parent; focusedObject = parent;
} }
if (focusLeftDataGrid) if (EditingRow != null && EditingColumnIndex != -1)
{
editingColumn = ColumnsItemsInternal[EditingColumnIndex];
if (focusLeftDataGrid && editingColumn is DataGridTemplateColumn)
{
dataGridWillReceiveRoutedEvent = false;
}
}
if (focusLeftDataGrid && !(editingColumn is DataGridTemplateColumn))
{ {
ContainsFocus = false; ContainsFocus = false;
if (EditingRow != null) if (EditingRow != null)

Loading…
Cancel
Save