I've been using the same bit of code for several versions of my app with no problems, but I'm now mysteriously receiving NullRerefenceException
s with the following:
this.Loaded += delegate {
deleteBrush = new DeleteBrushAdorner( background );
AdornerLayer al = AdornerLayer.GetAdornerLayer( background );
al.Add( deleteBrush ); // null ref here??
};
background
is just a Border
element.
My two thoughts on what could be causing it are a) switching to .NET 4.0, and b) placing instances of the above element (which is a UserControl
) in an ItemsControl
.
Oddly this doesn't happen all the time, and it's hard to predict when it will happen, so it's not reliable.
In my case I had a class that is based on Window
and GetAdornerLayer()
returned null. It turned out that the ControlTemplate
for my derived class did not contain the AdornerDecorator
. Adding that as the top level in the ControlTemplate
solved the issue.
<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>