Захват изменений в родительском визуальном дереве

Изнутри WPFFrameworkElementКак я могу зафиксировать любые изменения в пути визуального дерева от корня доFrameworkElement ? т.е. когдаFrameworkElementили любой из его родителей добавлен, удален или перемещен в другую ветвь визуального дерева?

  • Я искал подходящие события, но покаFrameworkElement имеетOnVisualParentChanged метод, он не предлагает соответствующего события, для которого могут быть зарегистрированы обработчики без подкласса элемента framework. Следовательно, это не может быть применено к произвольным, уже созданнымFrameworkElements.
  • По идееRelativeSource Привязка должна помочь мне здесь, но для того, чтобы это работало, мне уже нужно знать, какой родительский узел (какой тип, какой уровень) я ищу, а это не так (см. ниже).

Вариант использования: для этого другого вопроса одно многообещающее возможное решение будет включать использование текущего NameScopeактуально дляFrameworkElement, СоответствующийNameScope экземпляр может быть получен из NameScope вложенное свойство, но оно не установлено для каждого узла в дереве, только для корней визуальных деревьев, созданных из шаблонов элементов управления и окна.

Поэтому найти подходящий NameScope для меня FrameworkElementМне нужно пройтись по визуальному дереву, пока не найду узел, который не имеетnull значение, установленное для NameScope прикрепленное свойство, и мне придется повторить это для возможного обновления NameScope каждый раз, когда что-нибудь в визуальном дереве над моим FrameworkElement изменился

Эта дискуссия затрагивает тему, но ей уже 6 лет, и у нее нет решения.

0 ответов

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