我目前正在开发一个多语言应用程序,其中的界面文本可以在运行时根据用户选择的语言进行交换。我使用在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>
向我们展示代码如何“交换”该资源字典。 –