ListBoxItem上的WPF弹出窗口

ListBoxItem上的WPF弹出窗口,wpf,xaml,listbox,popup,Wpf,Xaml,Listbox,Popup,我有一个小工具栏弹出窗口,它显示在ListBoxItem的鼠标上方,它需要显示在该项目的正下方。 (鼠标悬停触发器还设置项目的IsSelected属性) 我尝试了两种选择: 在items数据模板上定义弹出窗口 在控件模板上为ListBoxItem定义弹出窗口 两个选项都很好,但是我想知道是否每次都会重新创建弹出窗口?? (请告知) 我认为最好在包含ListBox的ControlTemplate中定义弹出窗口,而不是ListBoxItem? 我尝试了这个方法,但找不到相对于SelectedItem

我有一个小工具栏弹出窗口,它显示在ListBoxItem的鼠标上方,它需要显示在该项目的正下方。 (鼠标悬停触发器还设置项目的IsSelected属性)

我尝试了两种选择:

  • 在items数据模板上定义弹出窗口
  • 在控件模板上为ListBoxItem定义弹出窗口
  • 两个选项都很好,但是我想知道是否每次都会重新创建弹出窗口?? (请告知)

    我认为最好在包含ListBox的ControlTemplate中定义弹出窗口,而不是ListBoxItem? 我尝试了这个方法,但找不到相对于SelectedItem的placement属性的绑定表达式(它显示在ListBox的底部,而不是ListBoxItem的底部)

    有什么建议吗

    提前谢谢。
    Michael。

    在这两种情况下,会为每个列表框项目创建一次弹出窗口


    我不建议对列表框的CotnrolTemplate中的所有项目使用单一弹出窗口,因为这会使事情变得非常复杂。但是如果您仍然想这样做,您可以在弹出窗口上设置
    Placement=“Custom”
    ,并指定
    CustomPopupPlacementCallback
    。在该回调中,您可以使用当前所选项目的位置计算位置。

    最好将弹出窗口保留在项目数据模板中。除非您的列表框中有数千个项目和一个非常详细的弹出窗口,否则您不应该有任何性能问题。谢谢Pavlo&Bob。好的,因为我的列表框很小,我想最好还是回到datatemplate选项。我开始挂接命令,并意识到这可能会更容易。。。(只是我将为单个controltemplate提供大约30个不同的数据模板,并考虑重用…)