'Элемент уже является ребенком другого элемента' ошибка в Silverlight App.xaml

Два глюка, что мне жаль, что я не учился на горьком опыте:

(1) Большой вывод (такой как printf) буферизуется по умолчанию. Если Вы отлаживаете отказывающий код, и Вы используете буферизованные операторы отладки, последний вывод, который Вы видите, май не действительно последний оператор печати, с которым встречаются в коде. Решение состоит в том, чтобы сбросить буфер после каждой печати отладки (или выключить буферизацию в целом).

(2) Быть осторожным с инициализациями - (a) избегают экземпляров класса как globals / помехи; и (b) пытаются инициализировать все Ваши членские переменные к некоторому безопасному значению в ctor, даже если это - тривиальное значение, такое как ПУСТОЙ УКАЗАТЕЛЬ для указателей.

Обоснование: упорядочивание инициализации глобального объекта не гарантируется (globals, включает статические переменные), таким образом, можно закончить с кодом, который, кажется, перестал работать недетерминировано, так как это зависит от объекта X инициализируемый перед объектом Y. Если Вы явно не инициализируете переменную типа примитива, такую как участник bool или перечисление класса, Вы закончите с различными значениями в удивительных ситуациях - снова, поведение может казаться очень недетерминированным.

8
задан ΩmegaMan 29 June 2015 в 15:07
поделиться

2 ответа

Я сам нашел причину проблемы благодаря подсказкам, приведенным в комментарии AnthonyWJones.

Похоже, что все в словаре ресурсов Silverlight должно быть доступно для совместного использования . Причина в том, что элементы внутри словаря ресурсов (вероятно) будут добавлены в нескольких местах в иерархии элементов управления.

У меня было два элемента в моем словаре ресурсов, которыми нельзя было поделиться.

РЕДАКТИРОВАТЬ : В WPF вы можете использовать атрибут x: Shared для объектов внутри словаря ресурсов, чтобы заставить WPF создавать новый экземпляр для каждого извлечения ресурса. К сожалению, Silverlight не поддерживает этот атрибут.

6
ответ дан 5 December 2019 в 17:38
поделиться

Вероятно, НЕ ответ на этот вопрос , но другая распространенная причина, по которой вы можете получить это «Элемент уже является потомком другого элемента». ошибка возникает, если вы пытаетесь загрузить ресурс, например изображение, и неправильно указали имя файла.

IE особенно жалуется, будет жаловаться на это.

<Image ToolTipService.ToolTip="Email customer" 
       Source="../images/FILE-THAT-DOESNT-EXIST.png"></Image>

Однако, поскольку это связано с ресурсами, возможно, существует сценарий, в котором это будет ответом на этот вопрос: -)

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

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