使用鼠标指针位置获取WPF列表框(system.windows.control.listbox)中listboxitem的索引

时间:2013-03-22 09:53:44

标签: c# wpf xaml listbox mouseenter

我是WPF的新手。我开发了一个WPF UserControl应用程序,其中有一个列表框。列表框的高度限制为400只是为了获得垂直滚动条。在这个列表框中,我有超过100个项目。现在,对于这些项目中的每一项,我必须显示一些工具提示,我需要列表框中当前鼠标指针下的项目索引。所以,为此,我添加了一个MouseEver事件,如MouseEnter。

以下是My Xaml代码的片段

<ListBox Name="AllProjects" TabIndex="0" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Visible" Height="400" MouseEnter="AllProjects_MouseEnter"> </ListBox>

这是后端C#代码

 private void AllProjects_MouseEnter(object sender, MouseEventArgs e)
    {
        Point Position = e.GetPosition((IInputElement)sender); 
    }

所以,我得到了当前列表框中鼠标指针的位置,但真正的问题是将此位置转换为列表框中项目的索引。由于我使用 system.windows.control.listbox 而非 System.Windows.Forms.listbox ,因此我没有 IndexFromPoint 方法。由于我的列表框可以垂直滚动,如果我尝试开发一个逻辑来获取索引,它将变得混乱。我只是想知道在这种情况下是否有任何简单的方法来获取listboxitem索引。 AllProjects 是我的列表框的名称。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您应该挂钩SelectionChanged事件,而不是使用MouseEnter事件。然后只需通过ListBox中的SelectedIndex属性获取项目的索引。

XAML:

<ListBox Name="AllProjects" SelectionChanged="AllProjects_SelectionChanged" />

C#:

private void AllProjects_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    int index = this.AllProjects.SelectedIndex;
}

但这是实现目前目标的一种“快速而肮脏”的方式。如果您真的想进入WPF,请尝试忘记在其他UI框架(如Windows窗体)中使用的大多数技术,并开始了解WPF Databinding的强大功能和XAML data templating的美感。

答案 1 :(得分:0)

您可以在此处找到问题的答案:https://stackoverflow.com/a/3368537/2132796
您无需获取列表框的选定索引属性。您只需使用上面链接的项目模板。
我也建议遵循Ucodias的建议并学习有关数据绑定的知识。