private void CustomDataGrid_PreviewKeyDown()

in src/AccessibilityInsights.SharedUx/Controls/CustomControls/CustomDataGrid.cs [25:44]


        private void CustomDataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            var modKey = e.KeyboardDevice.Modifiers;

            if (!(e.Key == Key.Tab) || !(modKey == ModifierKeys.None || modKey == ModifierKeys.Shift))
                return;

            var dir = modKey == ModifierKeys.Shift ? FocusNavigationDirection.Previous : FocusNavigationDirection.Next;

            // keep trying to move focus until focused element is not a descendant of the datagrid
            while (Keyboard.FocusedElement is Visual v && v.IsDescendantOf(this) && Keyboard.FocusedElement is FrameworkElement elem)
            {
                if (!elem.MoveFocus(new TraversalRequest(dir)))
                {
                    break;
                }
            }

            e.Handled = true;
        }