WPF: Как вы «отрисовываете» дочерний элемент из пользовательской панели? - PullRequest
1 голос
/ 22 мая 2011

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

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

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

1 Ответ

5 голосов
/ 20 июня 2011

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

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


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

...