Ссылка на пользовательский объект, объявленный как статическое разрешение в xaml, является нулевой. Зачем? - PullRequest
2 голосов
/ 12 января 2010

У меня есть небольшое тестовое приложение Silverlight 3.Это упражнение по изучению Silverlight, XAML, связывания и т. Д. У меня есть небольшой тестовый класс (Test), который имеет три свойства;Val1, Val2 и Sum.Я объявил ресурс в XAML следующим образом:

<UserControl.Resources>
    <app:Test x:Name="xamlTestObj"></app:Test>
</UserControl.Resources>

У меня есть кнопка на пользовательском элементе управления.Код этой кнопки выглядит следующим образом:

        xamlTestObj.Val1 += 100;
        xamlTestObj.Val2 += 300;

Решение строится успешно, но при его запуске я получаю исключение NullReferenceException в обработчике кнопки при обращении к xamlTestObj.Я смог успешно выполнить нажатие кнопки, если вытащил объект из списка ресурсов пользовательского элемента управления.Например:

        Test xamlTestObj = (Test)Resources["xamlTestObj"];
        xamlTestObj.Val1 += 100;
        xamlTestObj.Val2 += 300;

Что меня смущает, так это то, что мне нужно вытащить объект из списка ресурсов.Мне кажется, что если компилятор может видеть ссылку на xamlTestObj, он должен быть «живым» в течение всего срока действия области, в которой он объявлен (в данном случае, пользовательский элемент управления).Элементы управления WPF ведут себя таким образом.То есть я могу получить доступ к любым текстовым полям и кнопкам, которые я поместил в пользовательский элемент управления.

Может кто-нибудь прояснить это для меня?

Спасибо: -)

1 Ответ

1 голос
/ 12 января 2010

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

Кстати, вы должны использовать x:Key вместо x:Name для ресурсов

...