J'utilise le même bit de code pour plusieurs versions de mon application sans problème, mais je reçois maintenant mystérieusement nullrereefenceException code> S avec les éléments suivants:
this.Loaded += delegate {
deleteBrush = new DeleteBrushAdorner( background );
AdornerLayer al = AdornerLayer.GetAdornerLayer( background );
al.Add( deleteBrush ); // null ref here??
};
3 Réponses :
La même chose se produit si j'utilise un adornerdecorator code> au lieu d'une bordure code> code>, bien que je voie maintenant selon MSDN IT "fournit une couche Adorner pour des éléments sous i > c'est dans l'arbre visuel. " Laissez-moi essayer d'envelopper la frontière dans une adornerlayer ...
Dans mon cas, c'était null parce que j'essayais d'y accéder trop tôt (constructeur ou surpropertychanged code>). J'ai été capable d'y accéder dans
onRender () code> mais oui aussi bien sûr le
adornerdecorator code> doit être dans le modèle de contrôle
Je suis curieux de savoir si c'était vraiment résolu. Un AdornerDecorator fournit une adornerlayer pour l'élément ci-dessous - et tout sera en dessous. C'est un décorateur, ce qui signifie qu'il a un enfant qui est le contenu. Ce contenu est fourni avec une adornerlayer. Donc, si vous mettez un adornerdecorator dans votre XAML et que l'enfant est la frontière, la frontière a une adornerlayer. P>
En outre, la fenêtre définit un adornerdecorator comme le haut de l'arborescence visuelle de sorte qu'un élément d'une fenêtre aura une adornerlayeuse au-dessus de celle-ci. Donc, si votre conante ci-dessus était dans une fenêtre ... p>
La solution qui a fini par travailler était de simplement mettre un adornerdecorator code> ci-dessus i> (c'est-à-dire en tant que parent de) la bordure code> code> dans l'arborescence visuelle. C'était en effet dans une fenêtre, bien qu'en chroupelle, mais peut-être ceci est un problème avec .NET 4 parce que cela a fonctionné bien sans avoir le
adornerdecorator code> dans .NET 3.5.
J'ai eu le même problème. J'essayais d'orner les contrôles qui étaient à l'intérieur d'une fenêtre, mais Gettadornayer est retourné null, peu importe ce que j'essayais d'obtenir la couche Adorner.
Dans mon cas, j'ai eu une classe qui est basée sur fenêtre code> et
gettadornerlayer () code> renvoyé null. Il s'est avéré que le
ControlTemplate code> pour ma classe dérivée ne contenait pas le
adornerdecorator code>. Ajout que le niveau supérieur dans le
ControlTemplate code> a résolu le problème.
<Style TargetType="my:MyWindow" BasedOn="{StaticResource {x:Type Window}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="my:MyWindow">
<AdornerDecorator>
<DockPanel ...>
</DockPanel>
</AdornerDecorator>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>