private void GroupItem_PreviewKeyDown()

in src/AccessibilityInsights.SharedUx/Controls/TestTabs/AutomatedChecksControl.xaml.cs [856:912]


        private void GroupItem_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            var listViewItemParent = GetParentElem<ListViewItem>(Keyboard.FocusedElement as DependencyObject);
            if (Keyboard.FocusedElement is ListViewItem || listViewItemParent != null)
            {
                // Let it be handled by the listviewitem previewkeydown handler
                //  - this groupitem_previewkeydown event fires first
                return;
            }

            var gi = sender as GroupItem;
            var sp = GetFirstChildElement<StackPanel>(gi) as StackPanel;
            var exp = GetParentElem<Expander>(sp) as Expander;

            if (e.Key == Key.Right)
            {
                if (!exp.IsExpanded)
                {
                    exp.IsExpanded = true;
                }
                e.Handled = true;
            }
            else if (e.Key == Key.Left)
            {
                if (exp.IsExpanded)
                {
                    exp.IsExpanded = false;
                }

                e.Handled = true;
            }
            else if ((e.Key == Key.Space || e.Key == Key.Enter) && Keyboard.FocusedElement == sender)
            {
                var cb = GetFirstChildElement<CheckBox>(exp) as CheckBox;
                cb.IsChecked = !cb.IsChecked ?? false;
                CheckBox_Click(cb, null);
                e.Handled = true;
            }
            else if (e.Key == Key.Down)
            {
                if (!exp.IsExpanded)
                {
                    gi.MoveFocus(new TraversalRequest(FocusNavigationDirection.Down));
                }
                else
                {
                    ListViewItem firstResult = GetFirstChildElement<ListViewItem>(exp) as ListViewItem;
                    firstResult.Focus();
                }
                e.Handled = true;
            }
            else if (e.Key == Key.Up)
            {
                gi.MoveFocus(new TraversalRequest(FocusNavigationDirection.Up));
                e.Handled = true;
            }
        }