Dlaczego właściwość Parent kontenera ItemsControl zwraca wartość null, a nie panel, na którym znajduje się?

Ten ma mnie zakłopotany. Mamy niestandardowe ItemsControl, który używa zarówno kontenerów niestandardowych, jak i panelu niestandardowego jako jego ItemsHost. Teraz panel ma pewne parametry, których pojemniki potrzebują do celów renderowania. Ponieważ są one bezpośrednimi dziećmi panelu w drzewie wizualnym, można by pomyśleć, że właściwość Nadrzędna kontenera zwróci panel, ale tak nie jest!

Potwierdziłem to dokładnie za pomocą Snoopa na standardowym ListBox, więc nie jest to wyłączne dla naszego kodu, ale najwyraźniej wszystkie pojemniki ItemsControls.

Teraz wiem, że mogę użyć VisualTreeHelper, aby uzyskać wizualne rodzic (czego potrzebuję), ale dlaczego rodzicnie być panelem?

Jeśli argumentem jest, że panel jest po prostu częścią drzewa wizualnego, a element macierzysty jest zarezerwowany dla drzewa logicznego, to czy rodzic nie będzie kontrolerem ItemsControl?

Jeśli także argument kontenera jest częścią drzewa wizualnego ItemsControl, a nie drzewa logicznego, to dlaczego zawartość przechowywana w kontenerze zwraca kontener jako jego własność nadrzędną?

Oznacza to, że jeśli przechodzisz drzewo logiczne z elementu danych, zatrzymujesz się przy kontenerach, co może wyjaśniać, dlaczego nasze wiązania z kontenerów do paneli nie działają zgodnie z oczekiwaniami. (Wierzę, że powiązania są oparte na logicznej hierarchii, a nie wizualnej, ale musiałbym to sprawdzić.)

questionAnswers(2)

yourAnswerToTheQuestion