private void KeyboardNavigationInnerScopeTest(KeyboardNavigationMode innerScopeMode, Orientation orientation, int[] childrenTabIndex, FocusNavigationDirection direction, int[] expectedTargetChildrenIndex) { Control[] children = new[] { new Control { Name = "child0", Width = 100, Height = 100 }, new Control { Name = "child1", Width = 100, Height = 100 }, new Control { Name = "child2", Width = 100, Height = 100 }, new Control { Name = "child3", Width = 100, Height = 100 }, new Control { Name = "child4", Width = 100, Height = 100 }, }; if (childrenTabIndex != null) { for (int i = 0; i < childrenTabIndex.Length; i++) { KeyboardNavigation.SetTabIndex(children[i], childrenTabIndex[i]); } } StackPanel panel = new StackPanel { Name = "panel", Orientation = orientation }; panel.Children.Add(children[1]); panel.Children.Add(children[2]); panel.Children.Add(children[3]); StackPanel root = new StackPanel { Name = "root", Orientation = orientation, IsRootElement = true }; root.Children.Add(children[0]); root.Children.Add(panel); root.Children.Add(children[4]); KeyboardNavigation.SetTabNavigation(root, KeyboardNavigationMode.Cycle); KeyboardNavigation.SetTabNavigation(panel, innerScopeMode); for (int i = 0; i < expectedTargetChildrenIndex.Length; i++) { Visual currentChild = children[i]; Visual expectedTargetChild = children[expectedTargetChildrenIndex[i]]; Visual targetChild = KeyboardNavigationTarget.FindTarget(currentChild, direction, KeyboardNavigation.TabNavigationProperty); Assert.AreEqual(expectedTargetChild, targetChild); } }
public void KeyboardDirectionalNavigationBasicTest() { Control child1 = new Control { Name = "child1", Width = 100, Height = 100 }; Control child2 = new Control { Name = "child2", Width = 100, Height = 100 }; Control child3 = new Control { Name = "child3", Width = 100, Height = 100 }; Control child4 = new Control { Name = "child4", Width = 100, Height = 100 }; Control child5 = new Control { Name = "child5", Width = 100, Height = 100 }; Canvas.SetLeft(child1, 0); Canvas.SetTop(child1, 0); Canvas.SetLeft(child2, 400); Canvas.SetTop(child2, 10); Canvas.SetLeft(child3, 200); Canvas.SetTop(child3, 200); Canvas.SetLeft(child4, 10); Canvas.SetTop(child4, 400); Canvas.SetLeft(child5, 410); Canvas.SetTop(child5, 410); Canvas canvas = new Canvas { Width = 600, Height = 600, IsRootElement = true }; canvas.Children.Add(child1); canvas.Children.Add(child2); canvas.Children.Add(child3); canvas.Children.Add(child4); canvas.Children.Add(child5); canvas.Measure(new Size(1000, 1000)); canvas.Arrange(new Rect(1000, 1000)); KeyboardNavigation.SetDirectionalNavigation(canvas, KeyboardNavigationMode.Contained); Assert.AreEqual(child1, KeyboardNavigationTarget.FindTarget(child1, FocusNavigationDirection.Left, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child3, KeyboardNavigationTarget.FindTarget(child1, FocusNavigationDirection.Right, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child1, KeyboardNavigationTarget.FindTarget(child1, FocusNavigationDirection.Up, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child3, KeyboardNavigationTarget.FindTarget(child1, FocusNavigationDirection.Down, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child3, KeyboardNavigationTarget.FindTarget(child2, FocusNavigationDirection.Left, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child2, KeyboardNavigationTarget.FindTarget(child2, FocusNavigationDirection.Right, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child2, KeyboardNavigationTarget.FindTarget(child2, FocusNavigationDirection.Up, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child3, KeyboardNavigationTarget.FindTarget(child2, FocusNavigationDirection.Down, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child4, KeyboardNavigationTarget.FindTarget(child3, FocusNavigationDirection.Left, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child2, KeyboardNavigationTarget.FindTarget(child3, FocusNavigationDirection.Right, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child2, KeyboardNavigationTarget.FindTarget(child3, FocusNavigationDirection.Up, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child4, KeyboardNavigationTarget.FindTarget(child3, FocusNavigationDirection.Down, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child4, KeyboardNavigationTarget.FindTarget(child4, FocusNavigationDirection.Left, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child3, KeyboardNavigationTarget.FindTarget(child4, FocusNavigationDirection.Right, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child3, KeyboardNavigationTarget.FindTarget(child4, FocusNavigationDirection.Up, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child4, KeyboardNavigationTarget.FindTarget(child4, FocusNavigationDirection.Down, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child3, KeyboardNavigationTarget.FindTarget(child5, FocusNavigationDirection.Left, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child5, KeyboardNavigationTarget.FindTarget(child5, FocusNavigationDirection.Right, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child3, KeyboardNavigationTarget.FindTarget(child5, FocusNavigationDirection.Up, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child5, KeyboardNavigationTarget.FindTarget(child5, FocusNavigationDirection.Down, KeyboardNavigation.DirectionalNavigationProperty)); }
public void KeyboardDirectionalNavigationTransformTest() { Control child1 = new Control { Name = "child1", Width = 100, Height = 100, RenderTransform = new TranslateTransform(-300, 200) }; Control child2 = new Control { Name = "child2", Width = 100, Height = 100, RenderTransform = new TranslateTransform(-290, -200) }; Control child3 = new Control { Name = "child3", Width = 100, Height = 100, RenderTransform = new TranslateTransform(-100, 0) }; Control child4 = new Control { Name = "child4", Width = 100, Height = 100, RenderTransform = new TranslateTransform(100, 190) }; Control child5 = new Control { Name = "child5", Width = 100, Height = 100, RenderTransform = new TranslateTransform(110, -210) }; Grid grid = new Grid { Margin = new Thickness(100, 200, 0, 0), RenderTransform = new RotateTransform { Angle = 90 } }; grid.Children.Add(child1); grid.Children.Add(child2); grid.Children.Add(child3); grid.Children.Add(child4); grid.Children.Add(child5); Decorator root = new Decorator { IsRootElement = true, Child = grid, Margin = new Thickness(200, 100, 0, 0), }; root.Measure(Size.Infinity); root.Arrange(new Rect(root.DesiredSize)); KeyboardNavigation.SetDirectionalNavigation(root, KeyboardNavigationMode.Contained); Assert.AreEqual(child1, KeyboardNavigationTarget.FindTarget(child1, FocusNavigationDirection.Left, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child3, KeyboardNavigationTarget.FindTarget(child1, FocusNavigationDirection.Right, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child1, KeyboardNavigationTarget.FindTarget(child1, FocusNavigationDirection.Up, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child3, KeyboardNavigationTarget.FindTarget(child1, FocusNavigationDirection.Down, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child3, KeyboardNavigationTarget.FindTarget(child2, FocusNavigationDirection.Left, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child2, KeyboardNavigationTarget.FindTarget(child2, FocusNavigationDirection.Right, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child2, KeyboardNavigationTarget.FindTarget(child2, FocusNavigationDirection.Up, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child3, KeyboardNavigationTarget.FindTarget(child2, FocusNavigationDirection.Down, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child4, KeyboardNavigationTarget.FindTarget(child3, FocusNavigationDirection.Left, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child2, KeyboardNavigationTarget.FindTarget(child3, FocusNavigationDirection.Right, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child2, KeyboardNavigationTarget.FindTarget(child3, FocusNavigationDirection.Up, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child4, KeyboardNavigationTarget.FindTarget(child3, FocusNavigationDirection.Down, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child4, KeyboardNavigationTarget.FindTarget(child4, FocusNavigationDirection.Left, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child3, KeyboardNavigationTarget.FindTarget(child4, FocusNavigationDirection.Right, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child3, KeyboardNavigationTarget.FindTarget(child4, FocusNavigationDirection.Up, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child4, KeyboardNavigationTarget.FindTarget(child4, FocusNavigationDirection.Down, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child3, KeyboardNavigationTarget.FindTarget(child5, FocusNavigationDirection.Left, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child5, KeyboardNavigationTarget.FindTarget(child5, FocusNavigationDirection.Right, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child3, KeyboardNavigationTarget.FindTarget(child5, FocusNavigationDirection.Up, KeyboardNavigation.DirectionalNavigationProperty)); Assert.AreEqual(child5, KeyboardNavigationTarget.FindTarget(child5, FocusNavigationDirection.Down, KeyboardNavigation.DirectionalNavigationProperty)); }