查看下面的图片,您可以看到第四个ListBoxItem中的ListBoxItem具有焦点和KeyboardFocus,而选择了第二个ListBoxItem。
我知道我可以捕获文本框的GotFocus事件,获取它的DataContext,并设置绑定对象的IsSelected属性,以便选择ListBoxItem。
我想知道,当用户单击ListBoxItem包含的控件的任何时,是否有可能选择它?我之所以问这个问题,是因为我有一个带有大量控件的精心设计的TreeView,并且我正在寻找一种简单或优雅的方法,在用户单击它的任何地方时都可以选择TreeViewItem。

更新:
我接受了瑞秋的回答,因为它与ListBox完美地工作,它引导我找到了一个似乎对我的TreeView很有效的解决方案:侦听TreeViewItems上的GotFocus事件,当事件发生时,将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;
}发布于 2011-08-04 16:46:48
把这个放进你的ListBox.Resources
<Style TargetType="{x:Type ListBoxItem}">
<EventSetter Event="PreviewGotKeyboardFocus" Handler="SelectCurrentItem"/>
</Style>而这在代码背后
protected void SelectCurrentItem(object sender, KeyboardFocusChangedEventArgs e)
{
ListBoxItem item = (ListBoxItem)sender;
item.IsSelected = true;
}https://stackoverflow.com/questions/6945214
复制相似问题