我有一个小的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;
解决方案构建成功,但是当我运行它时,我在引用xamlTestObj时在按钮处理程序中得到NullReferenceException。如果我将对象拉出用户控件的资源列表,我就能成功执行按钮单击。像:
Test xamlTestObj = (Test)Resources["xamlTestObj"];
xamlTestObj.Val1 += 100;
xamlTestObj.Val2 += 300;
令我困惑的是为什么我需要将对象拉出资源列表。在我看来,如果编译器可以看到xamlTestObj引用它应该在它声明的作用域的生命周期中“活动”(在这种情况下,用户控件)。 WPF控件以这种方式运行。也就是说,我可以访问我在用户控件上放置的任何文本框和按钮。
任何人都可以为我解决这个问题吗?
谢谢: - )
答案 0 :(得分:1)
据我所知,只有可视树中的元素被加载到InitializeComponents
方法的相应字段中。资源不是可视化树的一部分,它们仅在需要时加载,因此它们的相应字段保持为空。
顺便说一下,您应该使用x:Key
而不是x:Name
来获取资源