首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从MouseLeftButtonDown获取WPF ListBox项

从MouseLeftButtonDown获取WPF ListBox项
EN

Stack Overflow用户
提问于 2009-08-26 15:53:44
回答 1查看 5.8K关注 0票数 3

我想在用户单击任何给定的ListBox项时运行一些代码。我的设置是一个带有自定义ItemsPanelTemplate (Pavan的ElementFlow)的ListBox。根据输入到MouseLeftButtonDown的位置数据,有没有一种方法来判断哪个项目被点击了?定制的ItemsPanelTemplate使这变得更困难(或更混乱)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-26 16:01:32

您可以拥有一个ItemContainerStyle,并在其中指定一个EventSetter:

代码语言:javascript
复制
<ListBox>
    <ListBox.ItemContainerStyle>
        <Style TargetType="{x:Type ListBoxItem}">
            <EventSetter Event="MouseLeftButtonDown" Handler="ListBoxItem_MouseLeftButtonDown" />
    ...

然后,在MouseLeftButtonDown的处理程序中,“发送者”将是ListBoxItem。

此外,如果您不想使用此方法,可以调用HitTest来查找指定位置的可视对象:

代码语言:javascript
复制
HitTestResult result = VisualTreeHelper.HitTest(myCanvas, pt);

ListBoxItem lbi = FindParent<ListBoxItem>( result.VisualHit );

public static T FindParent<T>(DependencyObject from) 
    where T : class
{
    T result = null;
    DependencyObject parent = VisualTreeHelper.GetParent(from);

    if (parent is T)
       result = parent as T;
    else if (parent != null)
       result = FindParent<T>(parent);

    return result;
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1335745

复制
相关文章

相似问题

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