현재 사용자가 선택한 언어를 기반으로 런타임에 인터페이스 텍스트를 바꿀 수있는 다국어 앱을 개발 중입니다. ResourceDictionary에 정의 된 DynamicResources를 사용하고 언어가 변경 될 때 사전 파일을 교체합니다. 이 기능은 DataGrid의 열 머리글 속성을 제외한 모든 항목에 유용합니다. DataGrid 열은 Visual Tree의 일부가 아니며 과거에 내 VM의 속성에 바인딩하기 위해 프록시를 사용했지만,이 경우에는 VM에 바인딩되지 않습니다. ResourceDictionary를 바꿀 때 어떻게 열 머리글을 업데이트 할 수 있습니까?DataGrid - 런타임시 열 머리글 변경
사전을 교체하는 방법은 다음과 같습니다. 이것은 Application.xaml.vb에 있으며 MySettings.Default에 저장된 문자열을 전달하는 응용 프로그램 시작시 호출됩니다. 또한 ComboBoxSelectedIndex에 바인딩 된 VM의 속성에서 메신저를 사용하여 호출됩니다.
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
관련 데이터 그리드 XAML
<DataGridTextColumn Header="{DynamicResource G_Spec}" ... />
ResourceDictionary의 항목
<system:String x:Key="G_Spec">Spec:</system:String>
리소스 사전을 "교환하는 방법"코드를 보여줍니다. –