我目前正在開發一個多語言應用程序,其中的界面文本可以在運行時根據用戶選擇的語言進行交換。我使用在ResourceDictionary中定義的DynamicResources,並在語言更改時交換字典文件。這適用於除DataGrid的列標題屬性之外的其他所有內容。我知道DataGrid列不是可視樹的一部分,並且在過去使用代理來綁定我的虛擬機中的屬性,但是在這種情況下,沒有綁定到虛擬機。如何在ResourceDictionary交換時更新列標題?DataGrid - 在運行時更改列標題
我的交換字典的方法如下。它駐留在Application.xaml.vb中,並在應用程序啓動時傳遞保存在MySettings.Default中的字符串。這也被稱爲使用來自綁定到ComboBoxSelectedIndex的VM中的屬性的Messenger。
Private Sub SetLanguage(ByVal language As String)
Dim dic As ResourceDictionary = Nothing
Dim langFile As String = Environment.CurrentDirectory & "\Languages\" & language & ".xaml"
If File.Exists(langFile) Then
Using fs As FileStream = New FileStream(langFile, FileMode.Open)
dic = CType(XamlReader.Load(fs), ResourceDictionary)
If LanguageCount > 0 Then
Resources.MergedDictionaries.RemoveAt(Resources.MergedDictionaries.Count - 1)
End If
Resources.MergedDictionaries.Add(dic)
End Using
End If
LanguageCount += 1
End Sub
,相關的DataGrid XAML
<DataGridTextColumn Header="{DynamicResource G_Spec}" ... />
的資源字典項
<system:String x:Key="G_Spec">Spec:</system:String>
向我們展示代碼如何「交換」該資源字典。 –