Browse Source

Fixed a bug in tab navigation

TabNavigation.GetFirstInNextContainer would only check one sibling
and would move up to the parent if the first sibling was not focuable
pull/1366/head
sdoroff 8 years ago
parent
commit
f50223cb0d
  1. 17
      src/Avalonia.Input/Navigation/TabNavigation.cs

17
src/Avalonia.Input/Navigation/TabNavigation.cs

@ -221,17 +221,16 @@ namespace Avalonia.Input.Navigation
return parent;
}
var siblings = parent.GetVisualChildren()
var allSiblings = parent.GetVisualChildren()
.OfType<IInputElement>()
.Where(FocusExtensions.CanFocusDescendants);
var sibling = direction == NavigationDirection.Next ?
siblings.SkipWhile(x => x != container).Skip(1).FirstOrDefault() :
siblings.TakeWhile(x => x != container).LastOrDefault();
var siblings = direction == NavigationDirection.Next ?
allSiblings.SkipWhile(x => x != container).Skip(1) :
allSiblings.TakeWhile(x => x != container).Reverse();
if (sibling != null)
foreach (var sibling in siblings)
{
var customNext = GetCustomNext(sibling, direction);
if (customNext.handled)
{
return customNext.next;
@ -239,13 +238,17 @@ namespace Avalonia.Input.Navigation
if (sibling.CanFocus())
{
next = sibling;
return sibling;
}
else
{
next = direction == NavigationDirection.Next ?
GetFocusableDescendants(sibling, direction).FirstOrDefault() :
GetFocusableDescendants(sibling, direction).LastOrDefault();
if(next != null)
{
return next;
}
}
}

Loading…
Cancel
Save