Установка фокуса на новые элементы в элементе управления элементами

У меня есть ListBox, в который добавляются новые элементы через привязку данных (т.е. что-то добавляется в список, и поле обновляется, чтобы включить новый элемент).

Элементы в списке являются редактируемыми шаблонами данных, поэтому возникает вопрос: как установить фокус на первое поле в шаблоне при добавлении нового элемента?

Я просмотрел этот вопрос и Я собираюсь посмотреть, приведет ли это меня к чему-либо, но на самом деле это не прямой ответ на мой вопрос.


person Steve Mitcham    schedule 20.04.2009    source источник


Ответы (1)


Вопрос, на который вы ссылаетесь, должен работать в вашей конкретной ситуации. Пока вы используете ObservableCollection для своего источника, вы можете установить:

<ListBox IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding MyCollection}" ItemTemplate="{StaticResource MyTemplate}/>

Это гарантирует, что по мере добавления элементов фокус будет отдан новому элементу, а затем диспетчер фокуса (взгляните на первый ответ в этом потоке) должен переключить фокус на TextBox. В статье MSDN приводится полезный пример, помещенный в шаблон здесь:

<DataTemplate x:Key="MyTemplate" DataType="{x:Type Classes:MyClass}">    
  <StackPanel FocusManager.FocusedElement="{Binding ElementName=firstButton}">
    <Button Name="firstButton" />
  </StackPanel>
</DataTemplate>
person Jeff Wain    schedule 20.04.2009
comment
Моя проблема на самом деле усложняется из-за наличия UserControl в шаблоне данных, который требует обработки события фокуса и передачи его в фактическое текстовое поле, которое я хочу, но настройки здесь позволили мне понять это, спасибо. - person Steve Mitcham; 21.04.2009
comment
Вы можете опубликовать свой код на случай, если кто-то еще придет в поисках чего-то похожего. - person Jeff Wain; 21.04.2009