2011-02-04 101 views
0

我有一個MiniToolbar彈出框,它顯示在ListBoxItem上的Mouseover上,它需要顯示在該項目下。 (鼠標懸停觸發也將在項目IsSelected屬性)ListBoxItem上的WPF彈出框

我嘗試了兩種選擇:

  1. 定義上的項目在彈出的DataTemplate
  2. 定義的控件模板彈出的ListBoxItem的

這兩個選項都可以正常工作,但是我想知道每次彈出窗口是否被重新創建? (請指教)

我認爲最好是在包含ListBox而不是ListBoxItem的ControlTemplate中定義彈出窗口? 我試過這個,但是找不到與SelectedItem相關的placement屬性的綁定表達式(它出現在ListBox的底部,而不是ListBoxItem的底部)。

有什麼建議嗎?

在此先感謝。 Michael。

+1

您最好在項目DataTemplate中留下彈出窗口。除非在列表框中有成千上萬的項目和一個非常詳細的彈出窗口,否則不應該有任何性能問題。 – Stewbob 2011-02-04 21:06:28

回答

1

在兩種情況下,都會爲每個列表框項目創建一次彈出窗口。

我不會建議您在CotnrolTemplate中爲列表框中的所有項目使用單個彈出窗口,因爲它顯着地使事情複雜化。但是,如果您仍想這樣做,則可以在彈出框中設置Placement="Custom"並指定CustomPopupPlacementCallback。在回調中,您可以使用當前選定項目的位置來計算展示位置。

+0

感謝Pavlo&Stewbob。好的,因爲我的ListBox很小,我想我會更好的恢復到datatemplate選項。我開始鉤住這些命令,並意識到它可能會更容易......(這只是我將有大約30個不同的數據模板用於單個控制模板並且考慮重用...) – Mike 2011-02-04 23:02:27