2010-11-22 4 views
3

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

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

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

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

+0

Вы включили опцию Inherits в метаданные, когда вы выполнили RegisterAttached? http://msdn.microsoft.com/en-us/library/ms753197.aspx – 2010-11-22 19:41:40

ответ

1

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

<Panel a:ToggleSwitch="Binding Path=(a:ToggleSwitch), 
      RelativeSource={RelativeSource Mode=FindAncestor, 
      AncestorType={x:Type Panel}}" /> 
+2

, что было бы намного более дорогостоящим. – 2013-01-12 22:40:55

16

Это должно работать нормально, в соответствии с Документами по Property Value Inheritance. Убедитесь, что ваш звонок, чтобы зарегистрировать собственность выглядит следующим образом:

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

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

+3

Если только документы всегда работали в соответствии с документами. Да, FrameworkPropertyMetadataOptions.Inherits установлен на DP. Но все равно не работает так, как ожидалось. – giri 2011-02-22 09:11:50

Смежные вопросы