【问题标题】:How to retrieve index of ListViewItem currently being hovered over?如何检索当前悬停的 ListViewItem 的索引?
【发布时间】:2011-06-16 16:32:05
【问题描述】:

我已经尝试解决这个问题,但还没有找到适合我的解决方案。

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

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

我在列表视图上有一个 MouseEnter 事件,每次鼠标移到实体上时都会触发该事件,并且在调试模式下,我可以深入了解发件人详细信息,并可以找到我想要的人的姓名,但我该怎么做它来自代码?

我想要的是这样的:

int index = sender.GetCurrentlyHoveredOverItem();

我不想通过列出我尝试过的所有内容来使这篇文章过于复杂,但是如果您想了解更多信息,请告诉我。

提前感谢您的帮助!

【问题讨论】:

    标签: wpf tooltip mouseevent


    【解决方案1】:

    正如其他人已经暗示但未明确表示的那样,ListView 中的项目应直接实现工具提示,如果需要,使用 ItemTemplate,而不是在全局级别。

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

    【讨论】:

      【解决方案2】:

      所以您有一个列表 (ListView) 的集合 (ItemsControl),并且您需要工具提示特定于其中一个内部列表中的特定元素,我理解正确吗?

      如果是这样,为什么不创建一个ListView.ItemTemplate 来解决这个问题?

      【讨论】:

      • 谢谢 H.B.我真的需要更多地了解模板,因为这是一个非常简单的解决方案,但它完全符合我的要求。我设置了一个 ListView.ItemTemplate,其 TextBlock 绑定到人名,并在 TextBlock 上设置了 MouseEnter 事件。鼠标事件让我可以访问当前悬停在项目上的名称(或至少是当前移动到项目上的项目),然后我可以执行该方法来检索该人的相关信息,然后我将 TextBlock ToolTip 绑定到。非常感谢。
      【解决方案3】:

      如果您使用的是 MVVM……

      IsMouseOver 绑定到 VM 中的属性,例如“CurrentlyHoveredPersonList”。使用OneWayToSource

      创建另一个名为“HoveredPersonListViewModel”的 VM 属性,其中包含工具提示所需的所有详细信息。当CurrentlyHoveredPersonList 被设置时,填充HoveredPersonListViewModel 并引发属性更改通知。您将获得对该对象的实际引用,因此您可能不需要索引,但如果需要,您可以使用 IndexOf(object) 从视图模型中的源列表中获取它。

      将工具提示的DataContext 绑定到HoveredPersonListViewModel 及其组成控件到相应的属性。

      【讨论】:

      • 不幸的是,您无法绑定IsMouseOver,因为它是只读的。应该可以确保进行OneWayToSource 绑定,但是在尝试error MC3065: 'IsMouseOver' property is read-only and cannot be set from markup 时会出现此错误
      • @Meleak,有一些方法可以将只读属性推送到 ViewModel 中。见stackoverflow.com/q/1083224/87399
      • @Joe White:是的,可以通过多种方式解决这个问题。这不是我评论的意思,感谢您指出这一点,因为我显然没有在我的评论中说清楚:) 我的意思是我认为应该可以使用OneWayToSource 绑定来阅读-唯一属性(如IsMouseOver
      • 感谢您花时间寻找解决方案。我没有试过这个看看它是否对我有用,而是我使用了一个 ItemTemplate(见上面 H.B. 的帖子)。也许我过于复杂化并寻找比需要更困难的解决方案,但知道什么是可能的很有用:)
      猜你喜欢
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多