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

本文关键字:列表 listbox control 索引 windows 鼠标指针 位置 获取 WPF system | 更新日期: 2023-09-27 18:05:10

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

下面是我的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是列表框的名称。

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

比起使用MouseEnter事件,你应该钩住SelectionChanged事件。然后,只需从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 Forms)中使用的大多数技术,开始学习WPF数据绑定的强大功能和XAML数据模板的美丽。

您将在这里找到问题的答案:https://stackoverflow.com/a/3368537/2132796
您不需要抓取列表框的选定索引属性。你只需要使用上面链接的项目模板。
我还建议遵循Ucodias的建议,学习一些关于数据绑定的知识。