我有一个自定义面板,一个列表框如何从定制儿童失效列表框的布局
<ItemsPanelTemplate x:Key="FloatPanelTemplate">
<Controls:FloatPanel x:Name="CardPanel" />
</ItemsPanelTemplate>
面板使用其X和Y依赖属性勾画出它的孩子。 当FloatPanel被自己使用时,这一切都很好用 - 我正在使用FrameworkPropertyMetadataOptions.AffectsArrange | FrameworkPropertyMetadataOptions.Affects测量子项的依赖项属性以告诉FloatPanel重绘其布局。当我在列表框中使用它(上面的代码)时,它在第一次绘制时很好,但是当我拖动子项(修改项目的X和Y)时,它不会通知Listbox它需要重画FloatPanel的孩子。我认为这个问题与这样一个事实有关,即绑定集合中的每个项目都被一个ListBoxItem包装。
希望我已经描述了我做得很好,有人可以告诉我如何让面板(或其子)告诉它需要再次执行布局例程。正如我所说的一次工作(初始绘制),但拖动项目不起作用(Listbox不知道它的子项已经改变,需要重新布局)。如果我拖动一个项目,然后调整窗口大小,列表框将做一个布局和这些物品被吸引到他们的新地点。
如何通知ListBox(或更重要的是ItemsPanelTemplate中的FloatPanel)它需要执行布局传递?
忘了提及我已经尝试过这些,但没有奏效。 FloatPanel似乎不是ListBoxItems中FloatElements的父级。 – 2010-03-22 06:34:05
这是真的,但我不知道为什么它甚至可以在第一个布局传递中工作,因为ListBoxItem容器将始终位于面板和项目本身之间。 – Josh 2010-03-22 06:39:33
好点。作为一个测试,我已经把cardPanel.InvalidateVisual();在ItemPanelTemplate中卡面板的mousemove事件上,并在拖动项目时正确重绘面板。 因此,它不是一个小组没有正确绘图的问题,它的问题是孩子们不通知列表框改变了它。 – 2010-03-22 07:16:32