WPF: Как вы "отрисовываете" дочерний элемент из пользовательской панели?

По сути, у меня есть панель, которая рисует свои дочерние элементы на основе DependencyProperty (FooProperty).

Если FooProperty имеет значение true, дочерний элемент упорядочен; в противном случае это не устроено. Первый проход - это нормально, но когда дочерний элемент меняет свой FooProperty с true (рисовать) на false (не рисовать), ArrangeOverride метод пропускает это, и ребенок остается нарисованным.

Я полагаю, что вместо того, чтобы пропускать детей, которые не должны быть нарисованы, мне нужен какой-то способ, чтобы их развел?

1 ответ

Решение

Вы не "растягиваете" дочерний элемент. Что происходит, когда что-то вызывает ArrangeOverride пройти вы просто сделайте свою математику, чтобы нарисовать / перерисовать его

Если вы хотите "псевдо пропустить" элемент, вы не можете. Как только он нарисован, он должен быть перерисован. Но вы всегда можете нарисовать его в точке (0, 0) с помощью Rect(0, 0). По сути, вы там ничего не делаете.


Так есть ли способ "по-настоящему" развязать предмет? Да, как-нибудь удалить его из коллекции InternalChildren. Это можно сделать, удалив элемент из дерева визуалов или, если ваша панель является хост-панелью для ItemsSource, вы можете удалить этот элемент из коллекции ItemsSource.

Другие вопросы по тегам