PredictFocus(FocusNavigationDirection.Next)
не работает, как сказал @Cameron.Мой код обёртки, основанный на посте @Randolpho, теперь работает хорошо.
Я попробовал несколько шаблонов и, наконец, пришел к выводу, что должен убедиться, что container
на самом деле является одним из родителей e
, чтобы избежать неожиданных результатов..
/// <summary>
/// Get next tab order element.
/// </summary>
/// <param name="e">The element to get next tab order</param>
/// <param name="container">The container element owning 'e'. Make sure this is a container of 'e'.</param>
/// <param name="goDownOnly">True if search only itself and inside of 'container'; otherwise false.
/// If true and next tab order element is outside of 'container', result in null.</param>
/// <returns>Next tab order element or null if not found</returns>
public DependencyObject GetNextTab(DependencyObject e, DependencyObject container, bool goDownOnly)
{
var navigation = typeof(FrameworkElement)
.GetProperty("KeyboardNavigation", BindingFlags.NonPublic | BindingFlags.Static)
.GetValue(null);
var method = navigation
.GetType()
.GetMethod("GetNextTab", BindingFlags.NonPublic | BindingFlags.Instance);
return method.Invoke(navigation, new object[] { e, container, goDownOnly }) as DependencyObject;
}
Пример.
var nextElement = GetNextTab(textbox1, window, false);