В WPF доступ к контейнерам внутри ListBox - PullRequest
0 голосов
/ 27 октября 2009

Я создаю DerivedListBox : ListBox и DerivedHeaderedContentControl : HeaderedContentControl, которые будут служить контейнером для каждого элемента в 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 ItemsSource очищается (или элемент в источнике предметов удаляется). Как определить, когда очищен ItemsSource, чтобы очистить список контейнеров?

1 Ответ

0 голосов
/ 27 октября 2009

Для этого конкретного сценария вам, вероятно, следует использовать событие ItemsContainerGenerator.ItemsChanged.

...