2011-01-27 84 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" />