ItemsPanel
으로 사용할 때 컨테이너를 재활용하는 사용자 지정 Canvas
을 구현하고 싶습니다. 그래서 VirtualizingPanel
에서 파생되었으며 ArrangeOverride
및 MeasureOverride
을 재정의했습니다. 나는이 같은 MeasureOverride
에 발생을하고있는 중이 야 : 나도 몰라 무엇WPF 항목 컨테이너 재활용
var children = base.InternalChildren;
var itemsControl = ItemsControl.GetItemsOwner(this);
var itemsCount = itemsControl.Items.Count;
IItemContainerGenerator generator = itemsControl.ItemContainerGenerator;
var startPos = generator.GeneratorPositionFromIndex(0);
using (generator.StartAt(startPos, GeneratorDirection.Forward, true))
{
for (int i = 0; i < itemsCount; i++)
{
bool isNewlyRealized;
var child = generator.GenerateNext(out isNewlyRealized) as UIElement;
if (isNewlyRealized)
{
base.AddInternalChild(child);
generator.PrepareItemContainer(child);
}
child.Measure(constraint);
}
}
는 재활용을 만드는 방법이다. 나는 다음과 같은 것을 시도했다 :
protected override void OnItemsChanged(object sender, ItemsChangedEventArgs e)
{
switch (e.Action)
{
case NotifyCollectionChangedAction.Remove:
case NotifyCollectionChangedAction.Replace:
case NotifyCollectionChangedAction.Move:
IRecyclingItemContainerGenerator generator = ItemsControl.GetItemsOwner(this).ItemContainerGenerator;
generator.Recycle(e.Position, e.ItemUICount);
RemoveInternalChildRange(e.Position.Index, e.ItemUICount);
break;
}
}
그러나 그것은 작동하지 않는다. 어떤 생각을 어떻게 할 것인가? 여기
사실, 재활용중인 경우 새 컨테이너를 생성하기 전에 '정리'코드 (마지막 코드 블록)를 호출해야합니다. 이는 사용 가능한 컨테이너 *가 필요할 때가되기 전 * 재활용하기를 원하기 때문입니다. 불필요한 몇 가지 생성물을 저장합니다. – MarqueIV
링크를 더 이상 사용할 수 없습니다. – Djof