我有一個小的Silverlight 3測試應用程序。這是學習Silverlight,XAML,綁定等的練習。我有一個小測試類(Test),它有三個屬性; Val1,Val2和Sum。我已經在XAML中聲明如下資源:引用自定義obj,聲明爲xaml中的靜態res,爲空。爲什麼?
<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控件的行爲就是這樣。也就是說,我可以訪問我放置在用戶控件上的任何文本框和按鈕。
任何人都可以爲我清除它嗎?
由於:-)
什麼托馬斯想說的是,公司在UserControl.Resources宣稱的東西只能通過this.Resources訪問[「SomeResource」]索引,您看到屬性xamlTestObj的唯一原因是因爲您給了ax:Name,但xaml只在調用構造函數中的InitializeComponents()時加載內容區域()內的元素,資源不是內容區域的一部分因此你的行爲 –
Neil
2010-01-12 07:46:39