Получение прикрепленного свойства наследования для распространения - PullRequest
3 голосов
/ 22 ноября 2010

У меня проблемы с получением значения присоединенного свойства для распространения по дереву от родителя к потомку в визуальной иерархии.Установка выглядит следующим образом:

У меня есть пользовательская панель, которая создает экземпляр Viewport3D.Затем Panel обрабатывает добавление и удаление дочернего элемента для создания и добавления унаследованного класса Visual3D для каждого дочернего элемента.

Я пытаюсь объявить присоединенное свойство с именем AttachedToggle property.Я хотел бы, чтобы это свойство находилось во внешнем классе владельца, называемом AttachedToggle, который реализует единственное свойство присоединенной зависимости IsChecked и позволяет либо родительской панели, либо любому из дочерних элементов Visual3D иметь возможность изменять значение и иметь экземпляр других элементов.значения отражают изменения.Ни Panel, ни класс Visual3D не наследуются от общей базы.Можно ли это сделать?

Я могу успешно изменить значение родительского и дочернего экземпляра IsChecked из кода приложения, используя Set / GetValue, но не могу получить это распространение для распространения.

Ответы [ 2 ]

16 голосов
/ 22 ноября 2010

Это должно работать нормально, согласно документации на Свойство Значение Наследование . Убедитесь, что ваш звонок для регистрации собственности выглядит так:

public static readonly DependencyProperty IsChecked = 
    DependencyProperty.RegisterAttached(
    "IsChecked",
    typeof(Boolean),
    typeof(AttachedToggle),
    new FrameworkPropertyMetadata(false, 
        FrameworkPropertyMetadataOptions.Inherits)
  );

- Отметьте флаг Inherits. См. Документы для FrameworkPropertyMetadataFrameworkPropertyMetadataOptions - вы также можете использовать OverridesInheritanceBehavior при необходимости).

0 голосов
/ 22 ноября 2010

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

<Panel a:ToggleSwitch="Binding Path=(a:ToggleSwitch), 
           RelativeSource={RelativeSource Mode=FindAncestor, 
           AncestorType={x:Type Panel}}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...