Вы не получаете значение напрямую из TextBlock.
Вместо этого вы привязываете SelectedItem к свойству вашей модели представления.Чтобы получить значение TextBlock напрямую, будет нарушаться принцип MVVM (если вы используете этот шаблон).Модель представления представляет данные, она не имеет ни малейшего представления о том, как эти данные отображаются в пользовательском интерфейсе.То есть он даже не подозревает, что существует три текстовых блока.
<ListBox Height="707" SelectedItem={Binding MyViewModelProperty} >
... etc ...
Это означает, что каждый раз, когда выбранный элемент изменяется, новое значение будет вставлено в привязанное свойство в модели представления.Все, что вам нужно сделать, это получить доступ к этому объекту - это так просто.Это означает, что вы также можете избавиться от перехвата событий SelectionChanged
, в зависимости от того, что он делает.
Однако, если вы настаиваете на получении экземпляра шаблона, используемого для представления какого-либо конкретного элемента данныхв элементе управления списком, то есть способ сделать это программно:
myListBox.ItemContainerGenerator.ContainerFromItem(myDataItem);
Это вернет вам StackPanel и его содержимое, вы можете затем использовать FindName () или просто перечислить дочерние элементы управления, чтобы найтитот, который вас интересует.
FrameworkElement element = myListBox.ItemContainerGenerator.ContainerFromItem(myDataItem) as FrameworkElement;
if (element != null)
FrameworkElement child = element.FindName("myChildName");