Глядя на следующее изображение, вы видите, что TextBox в четвертом ListBoxItem имеет Focus и KeyboardFocus, а второй ListBoxItem выбран.
Я знаю, что могу поймать событие GotFocus в Textbox, захватить его DataContext и установить свойство IsSelected связанного объекта, чтобы ListBoxItem стал выбранным.
Мне интересно, возможно ли этополучить ListBoxItem выбран, когда пользователь нажимает любой элементов управления, которые он содержит?Я спрашиваю об этом, потому что у меня есть несколько сложный TreeView с кучей элементов управления, и я ищу простой или элегантный способ выбора TreeViewItem всякий раз, когда пользователь нажимает на него где-либо.
![enter image description here](https://i.stack.imgur.com/YbnPw.png)
ОБНОВЛЕНИЕ:
Я принял ответ Рэйчел, поскольку он отлично работает с ListBox, и он привел меня к решению, которое, кажется, поддерживает мой TreeView:прослушивайте событие GotFocus в TreeViewItems, а когда событие происходит, установите для e.Handled значение true, чтобы предотвратить пузыри события до предков выбранного в настоящий момент TreeViewItem
Xaml:
<TreeView>
<TreeView.Resources>
<Style TargetType="TreeViewItem">
<EventSetter Event="GotFocus" Handler="TVI_GotFocus"/>
...
C #:
void TVI_GotFocus(object sender, RoutedEventArgs e)
{
e.Handled = true;
if (!(sender is TreeViewItem))
return;
if (((TreeViewItem)sender).IsSelected)
return;
((TreeViewItem)sender).IsSelected = true;
}