11
votes

Gettadornerlayer à retourner mystérieusement null

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??
};


0 commentaires

3 Réponses :



4
votes

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.

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 ...


2 commentaires

La solution qui a fini par travailler était de simplement mettre un adornerdecorator ci-dessus (c'est-à-dire en tant que parent de) la bordure 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 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.



12
votes

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>


0 commentaires