2013-06-29 2 views
-1

Все время я думал, что одной из целей конструкторов является создание новых внутренних объектов в классе и установка их значений. Но когда я попытался в Silverlight создать элемент управления (это были элементы управления для мобильного платежа) в конструкторе MainPage, я получил исключение NullReferenceException внутри третьей сборки. Когда я переместил код создания в обработчик кнопки, он работал нормально.Значение конструктора

Вопрос: Является ли это конкретным поведением Silverlight или я понимаю, что задача конструктора неправа?

// Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 

     //Exception 
     Banner Banner = new GeneralBanner (ContentPanel); 
    } 

    // Banner 
    public GeneralBanner (Grid contentPanel) 
    { 
     AdBanner = new InneractiveAd (AppId, InneractiveAd.IaAdType.IaAdType_Interstitial, 
      ContentPanel, 30, Options); 
    } 
+0

введите здесь свой код. –

+3

Какое исключение? Какой код генерирует исключение? Мы не можем просто догадываться. – David

+1

Это действительно зависит от того, что вы делаете именно внутри конструктора. При работе с элементами управления ваш код может получить доступ к компонентам, которые еще не полностью инициализированы. Обычно появляются специальные события, которые запускаются при инициализации элементов управления. Это не относится к Silverlight. – thmshd

ответ

0

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

См. Silverlight Layout System, чтобы понять, почему баннер не работает во время первоначального строительства.

+0

Спасибо. Я не знал этого, потому что я новичок в Silverlight и в пользовательском интерфейсе. В случае, когда мне нужно что-то сделать сразу после построения страницы, я должен использовать специальные события, как указано выше (например, FrameworkElement.Loaded Event)? – Ghosthack

+0

@Ghosthack Вам придется экспериментировать, но это происходит со всеми нами. Загруженное событие звучит как хороший. Так как MainPage является первой страницей всей системы, на которой находится страница, ориентированная на нее, она может не воспроизводиться так же, как другие; но снова продолжайте экспериментировать. – OmegaMan

Смежные вопросы