【问题标题】:DataGrid - Change Column Header at RuntimeDataGrid - 在运行时更改列标题
【发布时间】:2014-06-11 15:10:08
【问题描述】:

我目前正在开发一个多语言应用程序,其中界面文本可以在运行时根据用户选择的语言进行交换。我正在使用 ResourceDictionary 中定义的 DynamicResources 并在更改语言时交换字典文件。这适用于除 DataGrid 的 Column Header 属性之外的所有内容。我知道 DataGrid 列不是可视树的一部分,并且过去曾使用代理绑定到我的 VM 中的属性,但是,在这种情况下,没有绑定到 VM。交换 ResourceDictionary 时如何更新列标题?

我的字典交换方法如下。这驻留在 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

相关的DataGrid xaml

<DataGridTextColumn Header="{DynamicResource G_Spec}" ... />

ResourceDictionary 条目

<system:String x:Key="G_Spec">Spec:</system:String>

【问题讨论】:

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

标签: wpf xaml datagrid


【解决方案1】:

这是一个极其简化的例子,基本上你可以使用HeaderTemplate作为列:

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

【讨论】:

  • 我遇到了同样的问题。为什么这有效而 无效?
  • 非常感谢,解决了我工作了近一周的问题!上帝保佑你!
猜你喜欢
  • 2018-03-20
  • 1970-01-01
  • 2011-12-16
  • 2021-02-11
  • 2011-09-17
  • 2013-03-16
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
相关资源
最近更新 更多