123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- using Avalonia.Controls;
- using Avalonia.Input;
- using Xunit;
- namespace Avalonia.Base.UnitTests.Input
- {
- public class KeyboardNavigationTests_Custom
- {
- [Fact]
- public void Tab_Should_Custom_Navigate_Within_Children()
- {
- Button current;
- Button next;
- var target = new CustomNavigatingStackPanel
- {
- Children =
- {
- (current = new Button { Content = "Button 1" }),
- new Button { Content = "Button 2" },
- (next = new Button { Content = "Button 3" }),
- },
- NextControl = next,
- };
- var result = KeyboardNavigationHandler.GetNext(current, NavigationDirection.Next);
- Assert.Same(next, result);
- }
- [Fact]
- public void Right_Should_Custom_Navigate_Within_Children()
- {
- Button current;
- Button next;
- var target = new CustomNavigatingStackPanel
- {
- Children =
- {
- (current = new Button { Content = "Button 1" }),
- new Button { Content = "Button 2" },
- (next = new Button { Content = "Button 3" }),
- },
- NextControl = next,
- };
- var result = KeyboardNavigationHandler.GetNext(current, NavigationDirection.Right);
- Assert.Same(next, result);
- }
- [Fact]
- public void Tab_Should_Custom_Navigate_From_Outside()
- {
- Button current;
- Button next;
- var target = new CustomNavigatingStackPanel
- {
- Children =
- {
- new Button { Content = "Button 1" },
- new Button { Content = "Button 2" },
- (next = new Button { Content = "Button 3" }),
- },
- NextControl = next,
- };
- var root = new StackPanel
- {
- Children =
- {
- (current = new Button { Content = "Outside" }),
- target,
- }
- };
- var result = KeyboardNavigationHandler.GetNext(current, NavigationDirection.Next);
- Assert.Same(next, result);
- }
- [Fact]
- public void Tab_Should_Custom_Navigate_From_Outside_When_Wrapping()
- {
- Button current;
- Button next;
- var target = new CustomNavigatingStackPanel
- {
- Children =
- {
- new Button { Content = "Button 1" },
- new Button { Content = "Button 2" },
- (next = new Button { Content = "Button 3" }),
- },
- NextControl = next,
- };
- var root = new StackPanel
- {
- [KeyboardNavigation.TabNavigationProperty] = KeyboardNavigationMode.Cycle,
- Children =
- {
- target,
- (current = new Button { Content = "Outside" }),
- }
- };
- var result = KeyboardNavigationHandler.GetNext(current, NavigationDirection.Next);
- Assert.Same(next, result);
- }
- [Fact]
- public void ShiftTab_Should_Custom_Navigate_From_Outside()
- {
- Button current;
- Button next;
- var target = new CustomNavigatingStackPanel
- {
- Children =
- {
- new Button { Content = "Button 1" },
- new Button { Content = "Button 2" },
- (next = new Button { Content = "Button 3" }),
- },
- NextControl = next,
- };
- var root = new StackPanel
- {
- [KeyboardNavigation.TabNavigationProperty] = KeyboardNavigationMode.Cycle,
- Children =
- {
- (current = new Button { Content = "Outside" }),
- target,
- }
- };
- var result = KeyboardNavigationHandler.GetNext(current, NavigationDirection.Previous);
- Assert.Same(next, result);
- }
- [Fact]
- public void ShiftTab_Should_Navigate_Outside_When_Null_Returned_As_Next()
- {
- Button current;
- Button next;
- var target = new CustomNavigatingStackPanel
- {
- Children =
- {
- new Button { Content = "Button 1" },
- (current = new Button { Content = "Button 2" }),
- new Button { Content = "Button 3" },
- },
- };
- var root = new StackPanel
- {
- [KeyboardNavigation.TabNavigationProperty] = KeyboardNavigationMode.Cycle,
- Children =
- {
- target,
- (next = new Button { Content = "Outside" }),
- }
- };
- var result = KeyboardNavigationHandler.GetNext(current, NavigationDirection.Previous);
- Assert.Same(next, result);
- }
- [Fact]
- public void Tab_Should_Navigate_Outside_When_Null_Returned_As_Next()
- {
- Button current;
- Button next;
- var target = new CustomNavigatingStackPanel
- {
- Children =
- {
- new Button { Content = "Button 1" },
- (current = new Button { Content = "Button 2" }),
- new Button { Content = "Button 3" },
- },
- };
- var root = new StackPanel
- {
- [KeyboardNavigation.TabNavigationProperty] = KeyboardNavigationMode.Cycle,
- Children =
- {
- target,
- (next = new Button { Content = "Outside" }),
- }
- };
- var result = KeyboardNavigationHandler.GetNext(current, NavigationDirection.Next);
- Assert.Same(next, result);
- }
- private class CustomNavigatingStackPanel : StackPanel, ICustomKeyboardNavigation
- {
- public bool CustomNavigates { get; set; } = true;
- public IInputElement NextControl { get; set; }
- public (bool handled, IInputElement next) GetNext(IInputElement element, NavigationDirection direction)
- {
- return (CustomNavigates, NextControl);
- }
- }
- }
- }
|