WPF动态DataGrid标头

问题描述 投票:0回答:1

由于不可能让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>

字符串资源在一些单独的文件中,当我只是用相同的键交换一些其他文件但在其他语言上有文本时,标题会被更改。

这一切都很好,直到需要在两个地方使用相同的资源。我在两个DataGrids内有相同的TabItem。当我打开第一个,标题正常显示,然后我切换到另一个标签,标题也在那里。现在,当我改回第一个TabItem时,标题是空的。如果我首先打开第二个选项卡 - 当我切换到第一个选项卡然后再返回第二个选项卡时,标题为空,则会发生同样的事情。

如果我打开第二个标签时没有标题,那对我来说会更有意义,但是它们第一次显示在两个标签上,然后当我打开一个标签(这是第一个标签)时它们就消失了开放)第二次。

资源在资源字典中,如XAML文件。

c# wpf xaml resourcedictionary
1个回答
2
投票

您可以将x:Shared="false"属性添加到元素中。 这样,每个数据网格都会接收它自己的资源实例,而不是尝试共享同一个资源:

<TextBlock x:Key="dghName" Text="{DynamicResource Name}" x:Shared="false" />
<TextBlock x:Key="dghAge" Text="{DynamicResource Age}" x:Shared="false" />
© www.soinside.com 2019 - 2024. All rights reserved.