나는 꽤 일반화 된 솔루션을 찾고 있었지만, 꽤 구체적인 것을 만들 수있었습니다. 기본적으로 VisualTreeHelper를 사용하여 옆에있는 탭과 동일한 부모를 가진 자식을 찾습니다. 그 초점을 맞춘다.
내 컨트롤을 모두 거치지 않고 (상당히 큰 LOB 응용 프로그램을위한 것입니다.) 각 개체에 대해 "다음"컨트롤을 구성하는 것보다 더 좋은 해결책입니다.
다른 사람에게 도움이 될 경우를 대비하여 여기에 내 코드가 있습니다.
public static void TabNext(DependencyObject parentElement, Control fromControl)
{
var children = VisualTreeHelperUtil.FindChildren<Control>(parentElement).
Where(c => c.IsEnabled && c.IsTabStop && c.Visibility == Visibility.Visible).
ToList();
if (children.Contains(fromControl))
{
var thisIndex = children.IndexOf(fromControl);
var targetIndex = thisIndex + 1;
if (children.Count > targetIndex)
{
var targetChild = children[targetIndex];
fromControl.Dispatcher.BeginInvoke(() =>
{
targetChild.Focus();
var txt = targetChild as TextBox;
if (txt != null)
{
txt.SelectAll();
}
});
}
}
}
감사 @Craig 시어러이 공유를위한 (VisualTreeeHelperUtil는 VisualTreeHelper 일부 유틸리티 기능을 추가하는 내 자신의 클래스이다). 일부 코드를 사용하여 사용자 지정 연결 동작을 완료했습니다. 코드를 살펴보십시오. https://gist.github.com/4576803 –