我是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 是我的列表框的名称。提前谢谢。
答案 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的建议并学习有关数据绑定的知识。