2013-08-23 1 views
0

Как вы находите индекс ListBoxItem, если он установлен в DataTemplate в качестве элемента управления Textbox? Вот WPF:Поиск индекса списка ListBoxItem (ItemsTemplate для указания Visual COntent)

<ListBox Name="ScriptEditor" Margin="10" Height="291" ItemsSource="{Binding Path=Script}" SelectionChanged="ScriptEditor_SelectionChanged_1" > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBox Text="{Binding Path=Command}"PreviewMouseDoubleClick="Command_DoubleClick" GotFocus="ScriptEditor_GotFocus" /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
</ListBox> 

Когда я получить фокус текстового поля (текст привязан к ObservableCollection), я не могу просто использовать SelectionChanged событие на ListBox. Я хотел бы знать, как я могу определить индекс текстового поля я приобрел фокус в.

Благодаря

ответ

1

Вы можете связать AlternationCount к Script.Count затем добавить AlternationIndex из ItemsControl (ListBox) в TextboxTag, чтобы вы могли получить доступ к вашему обработчику событий GotFocus.

Пример:

<ListBox Name="ScriptEditor" Margin="10" Height="291" ItemsSource="{Binding Script}" AlternationCount="{Binding Script.Count}" > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBox Text="{Binding ., Mode=OneWay}" GotFocus="ScriptEditor_GotFocus" 
         Tag="{Binding Path=(ItemsControl.AlternationIndex), Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}" /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 


    private void ScriptEditor_GotFocus(object sender, RoutedEventArgs e) 
    { 
     int index = (int)(sender as TextBox).Tag; 
    } 
+0

Удивительный, что сделал это! – GCar89

Смежные вопросы