2013-10-17 78 views
3

我目前正在开发一个多语言应用程序,其中的界面文本可以在运行时根据用户选择的语言进行交换。我使用在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> 
+0

向我们展示代码如何“交换”该资源字典。 –

回答

4

这是一个非常简单的例子,基本上可以使用HeaderTemplate为列:

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.HeaderTemplate> 
     <DataTemplate> 
      <TextBlock Text="{DynamicResource MyColumnHeaderText}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.HeaderTemplate> 
</DataGridTemplateColumn> 
+0

那很简单,谢谢! – user1017477

+0

我有同样的问题。为什么这个工作和没有? – koala

+0

非常感谢,解决了我近一周来一直在研究的问题!上帝祝福你! –

相关问题