GetAdornerLayer, загадочно возвращая пустой указатель

Я использовал тот же бит кода для нескольких версий моего приложения без проблем, но я теперь загадочно получаю NullRerefenceExceptions со следующим:

this.Loaded += delegate {
    deleteBrush = new DeleteBrushAdorner( background );
    AdornerLayer al = AdornerLayer.GetAdornerLayer( background );
    al.Add( deleteBrush ); // null ref here??
};

background просто a Border элемент.

Мои две мысли о том, что могло вызывать его, a) переключение на.NET 4.0 и b) размещение инстанцирует вышеупомянутого элемента (который является a UserControl) в ItemsControl.

Странно этого не происходит все время, и трудно предсказать, когда это произойдет, таким образом, это не будет надежно.

10
задан devios1 14 June 2010 в 16:41
поделиться

2 ответа

В документации для AdornerLayer.GetAdornerLayer указано:

Если слои украшения не найдены, метод возвращает значение null.

Я предполагаю, что не существует декоративных слоев ... есть ли у вас основания полагать, что этого не должно быть? На какую гарантию вы в настоящее время рассчитываете, что в визуальном дереве будет слой украшения?

8
ответ дан 3 December 2019 в 17:57
поделиться

Мне любопытно, действительно ли это было решено. AdornerDecorator предоставляет AdornerLayer для элемента под ним - и все будет под ним. Это декоратор, то есть у него есть дочерний элемент, который является содержимым. Этот контент предоставляется AdornerLayer. Итак, если вы помещаете AdornerDecorator в свой XAML, а дочерний элемент является границей, граница действительно имеет AdornerLayer.

Кроме того, Window определяет AdornerDecorator как верхнюю часть визуального дерева, поэтому над любым элементом Window будет AdornerLayer. Итак, если ваш объект выше был в окне ...

3
ответ дан 3 December 2019 в 17:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: