2013-02-23 35 views
3

我是globalizing我的WinRT應用程序,我無法在我的組合框中使用語言資源。我可以在我的TextBlocks中使用它,使用文本屬性,但不使用x:字符串。我究竟做錯了什麼?在組合框中使用資源的XAML全球化

TextBlock x:Uid="Priority" Text="Default"></TextBlock> 
<ComboBox> 
    <x:String x:Uid="Color">Default1</x:String> 
    <x:String x:Uid="Color.Text">Default2</x:String> 
</ComboBox> 

編輯

爲什麼我不能填充在XAML代碼資源字符串組合框元素?我知道我可以在ComboBox中添加TextBlock元素來使用字典,或者正如我現在所做的那樣,通過代碼加載它們,但這不是對我的問題的迴應。

回答

3

據我所知當你在xaml中使用這是一個編譯時常量,它將不能在運行時更改並綁定到資源。這就是爲什麼你可能會將Default1或Default2視爲組合框中的項目。

我能找到解決問題的辦法。

想法是,在組合框中,您應該使用ComboBoxItem並將x:Uid設置爲資源的值。但是在資源文件中,實際名稱應該是Name.Content,因爲ComboBoxItem默認情況下有一個ContentPresenter,而不是TextBlock。

因此,這是爲我工作的代碼: 在資源文件我有:

Combo.Content  ComboBox1 

而且在XAML我用:

<ComboBox> 
    <ComboBoxItem x:Uid="Combo" /> 
</ComboBox> 

這將填充組合框與項目「ComboBox1」(來自資源文件)。

我還沒有測試過,看它是否適用於不同語言的資源文件,但我沒有看到它不應該工作的原因。

+0

+1是的,我嘗試過,它的工作原理。爲什麼我不記得嘗試ComboBoxItem? - 。 - 也許這將是答案,我會給你賞金。但是還剩5天,我會等待看看是否出現了另一個使用** **的解決方案。 :) 謝謝 – letiagoalves 2013-03-04 20:59:12

1

我懷疑(但沒有在文檔中找到具體的語句),resource.resw中的條目需要是(依賴性?)屬性的自動資源綁定工作的對象。字符串沒有這樣的屬性;例如,Default1不是String.Content的值。

阻力最小的路徑是使用TextBlock爲您的ComboBox元素。或者,您可以在代碼中加載資源並以此方式將其分配給字符串。

+0

我想通過代碼填充我的組合框的元素,但奇怪的是,我不能沒有添加具有Text屬性更多的元素在XAML中使用字符串資源 – letiagoalves 2013-02-24 19:44:13

0

是否有任何東西阻止您使用ComboBox的ItemsSource綁定?這樣,您可以使用包含所需信息的自定義對象,以及DisplayName屬性,然後可以從.resx文件中獲取正確的資源字符串。

如果這不是一個選項,我不知道現在什麼解決方案將完全在XAML中完成整個事情。

+0

不,我可以很容易地結合從資源讀取的ItemsSource數據。然而,我有這樣一種習慣,即儘可能縮短我的代碼,完全用XAML來完成整個事情似乎是正確的,但我的研究並未告訴我爲什麼我不能這麼做。 – letiagoalves 2013-03-04 12:43:32