2011-02-04 57 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