WPF: Как вы "отрисовываете" дочерний элемент из пользовательской панели?
По сути, у меня есть панель, которая рисует свои дочерние элементы на основе DependencyProperty (FooProperty).
Если FooProperty имеет значение true, дочерний элемент упорядочен; в противном случае это не устроено. Первый проход - это нормально, но когда дочерний элемент меняет свой FooProperty с true (рисовать) на false (не рисовать), ArrangeOverride
метод пропускает это, и ребенок остается нарисованным.
Я полагаю, что вместо того, чтобы пропускать детей, которые не должны быть нарисованы, мне нужен какой-то способ, чтобы их развел?
1 ответ
Вы не "растягиваете" дочерний элемент. Что происходит, когда что-то вызывает ArrangeOverride
пройти вы просто сделайте свою математику, чтобы нарисовать / перерисовать его
Если вы хотите "псевдо пропустить" элемент, вы не можете. Как только он нарисован, он должен быть перерисован. Но вы всегда можете нарисовать его в точке (0, 0) с помощью Rect(0, 0). По сути, вы там ничего не делаете.
Так есть ли способ "по-настоящему" развязать предмет? Да, как-нибудь удалить его из коллекции InternalChildren. Это можно сделать, удалив элемент из дерева визуалов или, если ваша панель является хост-панелью для ItemsSource, вы можете удалить этот элемент из коллекции ItemsSource.