2010-05-05 3 views
1

У меня есть ItemControl, который использует DataTemplate. DataTemplate содержит TextBox, который может принимать фокус клавиатуры. Мне нужно перенести фокус клавиатуры из текущего сфокусированного TextBox в DataTemplate в следующий TextBox, как если бы была нажата клавиша Tab. Я заметил, что существует метод UIElement.MoveFocus(), но это ставит вопрос о том, какой метод UIElement следует использовать для вызова метода. Вероятно, это причина, по которой я не получил этот метод для работы ... Любая помощь была бы действительно оценена!Focus In A ItemsControl

Спасибо,

Andrew

+0

О, извините. Клавиша Tab работает нормально. Мне нужно программно переключить фокус на следующий элемент в ItemsControl. – Andrew

+0

Я думаю, что я, возможно, удалил комментарий случайно ... Если это так, извините :(Я новичок ... – Andrew

+0

Нет, я удалил свой собственный комментарий, когда перечитываю ваш вопрос и понял, что я был идиотом . :) –

ответ

2

Вы должны быть в состоянии вызвать метод MoveFocus на вашем окне (или страницы, в зависимости от того, что ваш контейнер верхнего уровня).

this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)); 

Это будет сказать WPF, чтобы переместить фокус к следующему элементу управления, либо с использованием свойств TabIndex на контроле, или просто перемещение по горизонтали и вниз, естественно, чтобы найти следующий логический контроль.

Если вы не смогли напрямую вызвать MoveFocus на свой элемент ItemsControl (укажите ему имя и замените это «этим» на это имя в приведенном выше коде).

+0

Когда я пробую ваше предложение, фокус переходит к элементу ItemsControl, а не к следующему элементу в ItemsControl. Я попробовал вариант вашего предложения, tbxWithFocus.MoveFocus (новый TraversalRequest (FocusNavigationDirection.Down)); , но он перемещает фокус вниз по двум элементам в списке вместо одного. Это действительно странно. Я понятия не имею, почему он переместил бы два элемента в списке. Если я прокомментирую строку, она вообще не перемещает фокус ... – Andrew

+0

Как вы начинаете изменение фокуса? С помощью клавиши вкладок? Если это так, вам нужно будет отменить ключевое событие по умолчанию, используя e.Handled = true. – Josh

+0

Я должен, вероятно, упомянуть, что TextBox привязан к свойству в элементе управления и что метод, который вызывается, вставляет элемент в свойство ObservableCollection при нажатии клавиши ввода ... – Andrew