2013-10-17 72 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

非常感謝,解決了我近一週來一直在研究的問題!上帝祝福你! –

相關問題