2016-01-10 28 views
0

我嘗試創建一個具有包含不同視圖的主窗口的通用Windows應用程序。Universal App Resource resw values in different views

ContentFrame.Navigate(typeof(SimplePage)); 

其中ContentFrame是XAML幀和SimplePage是一個視圖。

該項目有兩個本地化。因此,我在包含兩個文件夾ende的解決方案中創建了一個文件夾Strings,其中包含每個Resources.resw文件。

我想在SimplePage視圖中使用resw-文件中的字符串。所以我想:

tbSimpleInput1.Text = ResourceManager.Current.MainResourceMap.GetValue("Resources/dataToolDiameter", ResourceContext.GetForCurrentView()).ValueAsString; 

我也用ResourceContext.GetForViewIndependentUse()代替ResourceContext.GetForCurrentView()嘗試,但嘗試調試時,我總是得到NullReferenceException

在不同視圖中訪問資源的正確方法是什麼?

在這裏,在Visual Studio中的解決方案的截圖:

Solution

+0

你的資源文件中有「dataToolDiameter」嗎?如果您的德語區域設置爲「德語」,則需要搜索德文件夾下的「資源」文件。 – Jackie

+0

是的,資源被正確定義。當我在主窗口中使用相同的語句時,只有當我想在子視圖中使用它時,纔會出現此錯誤。 – daengl

回答

1

如果你有一個單一的項目解決方案,我建議你要麼建立一個Shell - 作爲微軟例如建議,或者爲了本地化目的使用App.xaml.cs類。

首先,在任一類的構造函數,獲得當前ResourceLoader

// E.g use the static constructor of your App class 
static App() 
{ 
    _resourceLoader = new ResourceLoader(); 
} 

現在獲得的資源(如文本)是很容易的:

public static string GetLocalizedString(string key) 
{ 
    return _resourceLoader.GetString(key); 
} 

現在你可以加載字符串形成默認資源字典:

tbSimpleInput1.Text = App.GetLocalizedString("dataToolDiameter"); 

請注意:只要您在項目中使用默認模式進行本地化,就可以工作。如果你使用不同的資源文件,你會使用構造函數的超載。

+0

你能否給我一個微軟例子的鏈接?我無法找到它。 「App()」是否必須是「靜態」?默認情況下它是公開的,如果我改變它爲靜態我會得到錯誤。 – daengl

+0

@daengl這個例子是MVA視頻的一部分。您可以通過查看Universal Windows Apps的入門指南來找到它。你不應該改變類的聲明,你必須引入一個靜態構造函數,作爲答案中的代碼示例(和註釋)。 – Herdo

+0

謝謝,夥計們。我對MVA一無所知。 – daengl

相關問題