首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF:当一个控件获得焦点时,如何选择ListBoxItem?

WPF:当一个控件获得焦点时,如何选择ListBoxItem?
EN

Stack Overflow用户
提问于 2011-08-04 16:38:22
回答 2查看 2.5K关注 0票数 2

查看下面的图片,您可以看到第四个ListBoxItem中的ListBoxItem具有焦点和KeyboardFocus,而选择了第二个ListBoxItem。

我知道我可以捕获文本框的GotFocus事件,获取它的DataContext,并设置绑定对象的IsSelected属性,以便选择ListBoxItem。

我想知道,当用户单击ListBoxItem包含的控件的任何时,是否有可能选择它?我之所以问这个问题,是因为我有一个带有大量控件的精心设计的TreeView,并且我正在寻找一种简单或优雅的方法,在用户单击它的任何地方时都可以选择TreeViewItem。

更新:

我接受了瑞秋的回答,因为它与ListBox完美地工作,它引导我找到了一个似乎对我的TreeView很有效的解决方案:侦听TreeViewItems上的GotFocus事件,当事件发生时,将e.Handled设置为true,以防止事件冒泡到现在选择的TreeViewItem的祖先那里。

Xaml:

代码语言:javascript
复制
<TreeView>
    <TreeView.Resources>
        <Style TargetType="TreeViewItem">
            <EventSetter Event="GotFocus" Handler="TVI_GotFocus"/>
            ...

C#:

代码语言:javascript
复制
    void TVI_GotFocus(object sender, RoutedEventArgs e)
    {
        e.Handled = true;
        if (!(sender is TreeViewItem))
            return;
        if (((TreeViewItem)sender).IsSelected)
            return;
        ((TreeViewItem)sender).IsSelected = true;
    }
EN

Stack Overflow用户

回答已采纳

发布于 2011-08-04 16:46:48

把这个放进你的ListBox.Resources

代码语言:javascript
复制
<Style TargetType="{x:Type ListBoxItem}">
    <EventSetter Event="PreviewGotKeyboardFocus" Handler="SelectCurrentItem"/>
</Style>

而这在代码背后

代码语言:javascript
复制
protected void SelectCurrentItem(object sender, KeyboardFocusChangedEventArgs e)
{
    ListBoxItem item = (ListBoxItem)sender;
    item.IsSelected = true;
}
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6945214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档