Создание пользовательской панели макета WPF - игнорируемые дочерние элементы не исчезают - PullRequest
1 голос
/ 03 мая 2010

Добрый день. Я создаю пользовательский элемент управления макетом WPF, который должен пропускать дочерние элементы в процессе измерения / аранжировки, если они не помещаются в доступной области. Я тестирую с Blend.

Я попытался переопределить GetVisualChild (n) и VisualChildCount, чтобы попытаться позволить среде выполнения распознавать только определенные элементы в качестве моих желаемых потомков. Это, кажется, работает хорошо, но большая проблема, которую я имею, состоит в следующем:

Я помещаю некоторых детей в свой элемент управления макетом из Blend. Затем я сжимаю элемент управления, чтобы некоторые дети не помещались внутри моей панели. Проблема заключается в том, что дочерние элементы, которые больше не отображаются, остаются визуализированными на поверхности конструирования Blend. Я попытался сделать недействительным их визуальное изображение, вызвав «RemoveVisualChildI ()» ... но, похоже, ничто не заставляет исчезать визуализированные визуальные эффекты.

Врываясь в метод GetViasualChild (...), я наблюдаю за Blend, и среда выполнения запрашивает только фактических видимых дочерних элементов (полностью содержащихся внутри моей панели макета). Таким образом, мне кажется, что проблема связана с дочерними элементами, которые думают, что они все еще должны быть визуализированы ... или что панель контейнера просто не знает, что она нуждается в повторной визуализации.

Есть какие-нибудь подсказки? Я могу попытаться предоставить более подробную информацию, если это необходимо, но моей основной потребностью является возможность выборочно скрывать / показывать (не включать в процесс измерения / аранжировки) определенные дочерние элементы пользовательской панели.

Спасибо! - Шон

1 Ответ

1 голос
/ 19 мая 2010

Поскольку никто не ответил, я решил поделиться решением. Визуальное дерево устанавливается с помощью метода AddVisualChild (...) в базовом классе Visual. Панель позаботится об этом для вас с помощью детской коллекции. Чтобы решить эту проблему, все, что мне нужно было сделать, это создать экземпляр UIElementCollection и позволить ему выполнять грязную работу. Когда этот класс создается, ему передается визуальный родительский элемент и необязательный логический родительский класс. Когда элементы добавляются в эту коллекцию, родительские / дочерние отношения устанавливаются автоматически.

Надеюсь, это поможет следующему человеку!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...