由于DataGrid
标头无法动态读取某个资源文件,因此我使用SO上的方法来执行此操作。它的工作原理是使用TextBlock
作为资源,动态读取其他string
资源。像这样:
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Header="{StaticResource dghName}"/>
<DataGridTextColumn Header="{StaticResource dghAge}"/>
</DataGrid.Columns>
</DataGrid>
在资源中我会这样:
<TextBlock x:Key="dghName" Text="{DynamicResource Name}"/>
<TextBlock x:Key="dghAge" Text="{DynamicResource Age}"/>
<sys:String x:Key="Name">Name</sys:String>
<sys:String x:Key="Age">Age</sys:String>
字符串资源在一些单独的文件中,当我只是用相同的密钥替换某些其他文件但使用其他语言的文本时,标题会被更改。
这一切都很好,直到需要在两个地方使用相同的资源。我在两个DataGrid
内有相同的TabItem
。当我打开第一个,标题正常显示,然后我切换到另一个标签,标题也在那里。现在,当我更改回第一个TabItem
时,标题为空。如果我先打开第二个标签会发生同样的事情 - 当我切换到第一个标签然后再回到第二个标签时,标题是空的。
对我来说更有意义,如果我打开第二个标签时没有标题,但是它们第一次显示在两个标签上,然后当我打开一个标签(它是第一次打开)。
资源位于资源字典中,作为XAML
个文件。
答案 0 :(得分:2)
您可以为元素添加x:Shared="false"属性 这样,每个数据网格都会接收它自己的资源实例,而不是尝试共享同一个数据:
<TextBlock x:Key="dghName" Text="{DynamicResource Name}" x:Shared="false" />
<TextBlock x:Key="dghAge" Text="{DynamicResource Age}" x:Shared="false" />