2010-11-22 21 views
3

Je n'arrive pas à obtenir la propagation d'une valeur de propriété attachée dans l'arborescence d'un parent à un enfant dans la hiérarchie visuelle. La configuration est la suivante:Obtention de l'héritage de la propriété jointe à propager

J'ai un panneau personnalisé qui instancie un Viewport3D. Le panneau gère ensuite l'enfant ajouté et supprimé pour créer et ajouter une classe Visual3D héritée pour chaque élément enfant.

J'essaie de déclarer une propriété attachée appelée propriété AttachedToggle. Je souhaite que cette propriété réside dans une classe de propriétaire externe appelée AttachedToggle qui implémente la propriété de dépendance attachée unique IsChecked et autorise le Panel parent ou l'un des éléments Visual3D enfants à pouvoir modifier la valeur et avoir l'instance des autres éléments les valeurs reflètent le changement. Ni le Panel ni la classe Visual3D héritent d'une base commune. Cela peut-il être fait?

Je peux modifier avec succès la valeur d'instance parent et enfant de IsChecked à partir du code d'application à l'aide de Set/GetValue, mais je n'arrive pas à obtenir la propagation de la propagation.

+0

Avez-vous inclus l'option Hériter dans les métadonnées lorsque vous avez effectué RegisterAttached? http://msdn.microsoft.com/en-us/library/ms753197.aspx –

Répondre

1

Je ne suis pas sûr que les propriétés attachées dans l'arbre se propagent logique, mais vous pouvez essayer quelque chose comme ceci:

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

ce serait beaucoup plus coûteux en termes de performances. –

16

Cela devrait fonctionner correctement, selon les docs sur Property Value Inheritance. Assurez-vous que votre appel à enregistrer la propriété ressemble à:

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

-Note le drapeau Inherits. Voir les documents pour FrameworkPropertyMetadata (et FrameworkPropertyMetadataOptions - vous pouvez également utiliser OverridesInheritanceBehavior si nécessaire).

+3

Si seulement les choses fonctionnaient toujours selon les docs. Oui, FrameworkPropertyMetadataOptions.Inherits est défini sur le DP. Mais ne fonctionne toujours pas comme prévu. – giri