2011-01-27 79 views
2

我已经做了一些尝试解决这个问题,但还没有找到适合我的解决方案。如何检索当前正在悬停的ListViewItem的索引?

基本上我有一个<ItemsControl>并在<ItemsControl.ItemsTemplate>我有一个<ListView>它显示了一些人的名字。总是会列出0到5个人的名字。

我想要做的是提供一个工具提示弹出式窗口,其中包含与正在悬停的实体相关的附加信息。我如何获得我当前悬停的项目的索引(或名称等内容),以确保工具提示显示的是正确的人?

我有每触发了在调试模式下的实体&移动鼠标,我可以探索下来到发送者的详细信息时间&能找到我想要的人的名字在列表视图一个MouseEnter事件,但我怎么弄它从代码?

我想是这样的:

int index = sender.GetCurrentlyHoveredOverItem(); 

我不想过分复杂化这篇文章,列出一切我试过,但如果你想任何进一步的信息,请让我知道。

在此先感谢您的帮助!

回答

0

所以,你有名单的集合(ItemsControl中)(ListView控件),你需要的工具提示到内部列表中的一个内具体到特定的元素,我有没有理解正确吗?

如果是这样,为什么不创建一个ListView.ItemTemplate采取这一服务?

0

如果您使用的MVVM ...

绑定IsMouseOver在虚拟机的属性,如 “CurrentlyHoveredPersonList”。使用OneWayToSource

创建另一个虚拟机属性调用包含您需要为您提示的所有细节“HoveredPersonListViewModel”。当CurrentlyHoveredPersonList设置时,填充HoveredPersonListViewModel并引发属性更改通知。您将获得对该对象的实际引用,因此您可能不需要该索引,但如果这样做,则可以使用IndexOf(object)从视图模型中的源列表中获取该索引。

绑定工具提示的DataContextHoveredPersonListViewModel和其至其相应的属性子控件。

+0

不幸的是,你不能绑定`IsMouseOver`,因为它是只读的。确实应该可以做一个`OneWayToSource`绑定,但是在尝试它的时候出现这个错误`错误MC3065:'IsMouseOver'属性是只读的,不能从标记设置' – 2011-01-27 18:20:49

+0

@Meleak,有办法推读 - 只有ViewModel的属性。请参阅http://stackoverflow.com/q/1083224/87399。 – 2011-01-27 21:52:09

1

正如其他人在暗示,但未明确表示,在ListView的项目应直接实现的工具提示,如果需要的话,而不是在全球范围内使用一个ItemTemplate。

<ListViewItem ToolTipService.ToolTip="Tooltip for this item" />