2

我有一個小的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控件的行爲就是這樣。也就是說,我可以訪問我放置在用戶控件上的任何文本框和按鈕。

任何人都可以爲我清除它嗎?

由於:-)

回答

1

據我所知,僅在可視樹中的元素被加載到在InitializeComponents方法及其相應的字段。資源不是可視樹的一部分,它們只在需要時加載,所以它們的相應字段保持爲空。

順便說一句,你應該使用x:Key而非x:Name資源

+1

什麼托馬斯想說的是,公司在UserControl.Resources宣稱的東西只能通過this.Resources訪問[「SomeResource」]索引,您看到屬性xamlTestObj的唯一原因是因爲您給了ax:Name,但xaml只在調用構造函數中的InitializeComponents()時加載內容區域()內的元素,資源不是內容區域的一部分因此你的行爲 – Neil 2010-01-12 07:46:39

相關問題