Захват изменений в родительском визуальном дереве
Изнутри WPFFrameworkElement
Как я могу зафиксировать любые изменения в пути визуального дерева от корня доFrameworkElement
? т.е. когдаFrameworkElement
или любой из его родителей добавлен, удален или перемещен в другую ветвь визуального дерева?
- Я искал подходящие события, но пока
FrameworkElement
имеетOnVisualParentChanged
метод, он не предлагает соответствующего события, для которого могут быть зарегистрированы обработчики без подкласса элемента framework. Следовательно, это не может быть применено к произвольным, уже созданнымFrameworkElement
s. - По идее
RelativeSource
Привязка должна помочь мне здесь, но для того, чтобы это работало, мне уже нужно знать, какой родительский узел (какой тип, какой уровень) я ищу, а это не так (см. ниже).
Вариант использования: для этого другого вопроса одно многообещающее возможное решение будет включать использование текущего NameScope
актуально дляFrameworkElement
, СоответствующийNameScope
экземпляр может быть получен из NameScope
вложенное свойство, но оно не установлено для каждого узла в дереве, только для корней визуальных деревьев, созданных из шаблонов элементов управления и окна.
Поэтому найти подходящий NameScope
для меня FrameworkElement
Мне нужно пройтись по визуальному дереву, пока не найду узел, который не имеетnull
значение, установленное для NameScope
прикрепленное свойство, и мне придется повторить это для возможного обновления NameScope
каждый раз, когда что-нибудь в визуальном дереве над моим FrameworkElement
изменился
Эта дискуссия затрагивает тему, но ей уже 6 лет, и у нее нет решения.