2

我有一个小的 Silverlight 3 测试应用程序。这是一个学习Silverlight、XAML、绑定等的练习。我有一个小测试类(Test),它有三个属性;Val1、Val2 和总和。我在 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 控件以这种方式运行。也就是说,我可以访问我放置在用户控件上的任何文本框和按钮。

谁能帮我解决这个问题?

谢谢 :-)

4

1 回答 1

1

据我所知,只有可视树中的元素被加载到InitializeComponents方法中的相应字段中。资源不是可视化树的一部分,它们仅在需要时加载,因此它们的相应字段保持为空。

顺便说一句,您应该使用x:Key而不是x:Name获取资源

于 2010-01-12T01:21:27.430 回答