2013-02-06 3 views
0

J'ai essayé cela juste pour voir ce qui va se passer et ça a marché mais je ne sais pas pourquoi. Quelqu'un peut-il m'expliquer ce qui se passe dans le fond de DependencyProperties?DependencyProperty Strange Behavior

J'ai une classe qui déclare une DependencyProperty mais dans une autre classe que je cible que DependencyProperty en utilisant GetValue et SetValue.

est un exemple:

public class DependencyProperties : DependencyObject 
{ 
    public Size EstimatedSize 
    { 
     get { return (Size)GetValue(EstimatedSizeProperty); } 
     set { SetValue(EstimatedSizeProperty, value); } 
    } 

    public static readonly DependencyProperty EstimatedSizeProperty = 
     DependencyProperty.Register("EstimatedSize", typeof(Size), typeof(DependencyProperties), null); 
} 

public class MyControl: ContentControl 
{ 
    public Size CalculatedSize 
    { 
     get { return (Size)GetValue(DependencyProperties.EstimatedSizeProperty); } 
     set { SetValue(DependencyProperties.EstimatedSizeProperty, value); } 
    } 

    protected override OnApplyTemplate() 
    { 
     // This works but why? How is it possible to do this? What is happening under the hood? 
     this.CalculatedSize = new Size(123, 123); 
    } 
} 

Pourquoi est-il possible de le faire? Que se passe-t-il en arrière-plan de cet exemple? La classe MyControl n'a pas enregistré le DP mais il peut l'utiliser. Quelqu'un peut-il me dire ce qui se passe sous le capot?

+0

Duplicata possible: http://stackoverflow.com/questions/6843877/difference-between-attached-and-non-attached-dependency-properties-in-silverligh – Blachshma

Répondre

0

J'ai googlé l'image que je voudrais vous montrer. Voir le lien ci-dessous, et le concept de DP est bien documenté.

http://www.abhisheksur.com/2011/07/internals-of-dependency-property-in-wpf.html

Et, nous allons aller à la ligne de fond directement, lorsque vous invitez et utilisez MyControl dans votre application, contenu DP est automatiquement enregistré. C'est pourquoi DP utilise le préfixe statique. Pour la raison de static readonly dans la déclaration DP, veuillez lire le lien https://stackoverflow.com/a/5610015/361100 (réponse citée de Priyank).

+0

Que se passera-t-il si j'utilise .Register (... rameworkPropertyMetadataOptions.Inherits)? Ce n'est pas un AttachedProperty mais essaye d'hériter. – cyberist