Я создаю DerivedListBox : ListBox
и DerivedHeaderedContentControl : HeaderedContentControl
, который будет служить контейнером для каждого элемента в ListBox
.В WPF доступ к контейнерам в ListBox
Чтобы вычислить размер, доступный для расширенного содержимого DerivedHeaderedContentControl
, я сохраняю каждый объект-контейнер в списке в пределах DerivedListBox
. Таким образом, я могу рассчитать высоту заголовков каждого DerivedHeaderedContentControl
и вычесть это из общего размера, доступного для DerivedListBox
. Это будет размер, доступный для расширенного содержимого DerivedHeaderedContentControl
.
public class DerivedHeaderedContentControl : HeaderedContentControl
{
// Do some binding to DerivedListBox to calculate height.
}
public class DerivedListBox : ListBox
{
private List<DerivedHeaderedContentControl> containers;
protected override DependencyObject GetContainerForItemOverride()
{
DerivedHeaderedContentControl val = new DerivedHeaderedContentControl();
this.containers.Add(val);
return val;
}
// Do some binding to calculate height available for an expanded
// container by iterating over containers.
}
Проблема возникает, когда рассеялся DerivedListBox
«s ItemsSource
(или элемент в источнике пунктов удаляется). Как определить, когда очищается ItemsSource
, чтобы я мог очистить список контейнеров?
Есть ли способ доступа к внутренним контейнерам, созданным с помощью GetContainerForItemOverride() из класса DerivedListBox? Я бы предположил, что они управляются внутри класса, и доступ к этим объектам, а не управление моим собственным списком, будет идеальным. –