2010-06-28 10 views
1

J'ai une classe qui hérite de DrawingVisual. Il déclare un DependencyProperty qui, lorsqu'il est enregistré, doit hériter sa valeur d'un parent. Je crée ensuite une relation parent-enfant entre deux instances de cette classe. J'ai défini DependencyProperty parent mais DependencyProperty de l'enfant ne renvoie pas la valeur du parent. Quelqu'un peut-il déterminer ce que je fais mal?DrawingVisual DependencyProperty ne héritant pas du parent

est ici la déclaration pour le sous-type DrawingVisual:

public class MyDrawingVisual : DrawingVisual 
{ 
    public static readonly DependencyProperty SomeValueProperty; 

    static MyDrawingVisual() 
    { 
     FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata() { Inherits = true }; 
     SomeValueProperty = DependencyProperty.Register("SomeValue", typeof(double), typeof(MyDrawingVisual), metadata); 
    } 

    public double SomeValue 
    { 
     get { return (double)GetValue(SomeValueProperty); } 
     set { SetValue(SomeValueProperty, value); } 
    } 
} 

La méthode qui crée la relation parent-enfant est la suivante:

private void Test() 
{ 
    MyDrawingVisual mdv1 = new MyDrawingVisual() { SomeValue = 1.23 }; 
    MyDrawingVisual mdv2 = new MyDrawingVisual(); 
    mdv1.Children.Add(mdv2); 
    double value = mdv2.SomeValue; // Expected = 1.23, actual = 0.0 
} 

Toute aide grandement appréciée, merci.

Répondre

1

FrameworkPropertyMetadata ne fonctionne que pour les classes dérivées de FrameworkElement.

J'ai reproduit votre problème sur une application WPF générée par VS, puis j'ai dérivé MyDrawingVisual de FrameworkElement et cela fonctionne comme annoncé. Si elle dérive de UIElement (la classe de base de FrameworkElement), elle ne fonctionne plus.

L'héritage visuel dépend de la propriété interne InheritanceParent, que nous ne pouvons pas définir, désolé.

+0

Bon endroit, merci. – Chris