1

我是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是我的列表框的名称。提前致谢。

4

2 回答 2

1

而不是使用 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 窗体)中使用的大多数技术,并开始了解WPF 数据绑定的强大功能和XAML 数据模板的美妙之处。

于 2013-03-22T12:52:50.727 回答
0

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

于 2013-03-23T14:45:52.223 回答