2010-09-30 31 views
2

我已經DOEN是基於這篇文章: http://msdn.microsoft.com/en-us/library/aa348547.aspx的Silverlight:App.Current.Resources是空

我試圖讓從在App.xaml中加載的合併字典的字符串。 我想從一個不是代碼背後的代碼中做到這一點。 我知道原則上可以加載資源文件,因爲頁面元素是通過Styles.xaml文件中包含的樣式的xaml標記進行樣式設置的。

App.xaml文件

<Application 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Class="theApp.App"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Assets/Styles.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

的styles.xaml文件(編輯了下來爲簡單起見)

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" 
    xmlns:clr="clr-namespace:System;assembly=mscorlib"> 

    <clr:String x:Key="applicationName">TheKraken</clr:String> 
</ResourceDictionary> 

的代碼行我使用嘗試和訪問資源

string appName = (string)App.Current.Resources["applicationName"]; 

任何想法我失蹤?

+1

在應用程序啓動過程中,您是否嘗試訪問資源?您的實際使用看起來正確。 – 2010-09-30 09:50:49

+0

我試圖在頁面顯示後使用它。它是自定義登錄和令牌緩存控制的一部分。我其實已經想出了這個問題。 – 2010-09-30 15:07:27

回答

1

該代碼的真正問題不在代碼本身。

我將分配資源的變量作爲linq where子句的一部分使用。

你不會相信這一點,因爲我今天有3人撓頭。 的情況是這樣的: 我有一組保證的前提下app.Current.Resources不是空的合同報表 - 所有這些通過

爲了展示怪異的緣故,我的資源分配給2個獨立的串。 其中一個在linq where子句中使用,另一個用於證明從資源中拉出字符串確實有效。 where子句中的字符串爲null,不能設置爲null以外的任何其他字符。另一個字符串包含預期的數據。兩個字符串都使用precisley分配相同的代碼。更奇怪的是,如果我初始化一個字符串來表示「john」,然後將資源數據賦值給它,然後在linq中使用它,那麼給該字符串賦值「john」也會導致字符串爲空。 linq當時正在XElement上工作。

string test = "John"; 
test = (string)App.Current.Resources["applicationName"]; 
var results = from ........ 
       where x == test 
       select something 

這導致測試未設置爲約翰-IE linq在代碼被質疑之後對賦值產生影響。

問題的解決方法是將linq移入另一個rmethod,然後一切正常。我絲毫不知道爲什麼會出現這種情況。

雖然我很想知道。我很想在一個新項目中重新創建它,並將它發送到Microsoft tbh。但是我希望有一個明顯而合理的解釋。