我有一個自定義面板,一個列表框如何從定製兒童失效列表框的佈局
<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