WPF 动态数据网格 headers
WPF Dynamic DataGrid headers
因为不可能 DataGrid
headers 动态读取一些资源文件,所以我使用了在 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>
字符串资源位于某个单独的文件中,当我将它替换为具有相同键但使用其他语言的文本的其他文件时,headers 发生了变化。
这一切都很好,直到需要在两个地方使用相同的资源。我在两个 TabItem
内有相同的 DataGrid
。当我打开第一个时, headers 正常显示,然后我切换到另一个选项卡, headers 也在那里。现在,当我改回第一个 TabItem
时,headers 是空的。如果我先打开第二个选项卡,也会发生同样的事情 - 当我切换到第一个选项卡然后返回到第二个选项卡时,headers 为空。
如果我打开第二个选项卡时没有 headers 对我来说更有意义,但它们是第一次显示在两个选项卡上,然后它们就消失了,当我打开一个选项卡(这是第一个打开的)第二次。
资源在资源字典中,如 XAML
个文件。
您可以向元素添加 x:Shared="false" 属性。
这样每个数据网格都会收到它自己的资源实例,而不是试图共享同一个资源实例:
<TextBlock x:Key="dghName" Text="{DynamicResource Name}" x:Shared="false" />
<TextBlock x:Key="dghAge" Text="{DynamicResource Age}" x:Shared="false" />
因为不可能 DataGrid
headers 动态读取一些资源文件,所以我使用了在 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>
字符串资源位于某个单独的文件中,当我将它替换为具有相同键但使用其他语言的文本的其他文件时,headers 发生了变化。
这一切都很好,直到需要在两个地方使用相同的资源。我在两个 TabItem
内有相同的 DataGrid
。当我打开第一个时, headers 正常显示,然后我切换到另一个选项卡, headers 也在那里。现在,当我改回第一个 TabItem
时,headers 是空的。如果我先打开第二个选项卡,也会发生同样的事情 - 当我切换到第一个选项卡然后返回到第二个选项卡时,headers 为空。
如果我打开第二个选项卡时没有 headers 对我来说更有意义,但它们是第一次显示在两个选项卡上,然后它们就消失了,当我打开一个选项卡(这是第一个打开的)第二次。
资源在资源字典中,如 XAML
个文件。
您可以向元素添加 x:Shared="false" 属性。
这样每个数据网格都会收到它自己的资源实例,而不是试图共享同一个资源实例:
<TextBlock x:Key="dghName" Text="{DynamicResource Name}" x:Shared="false" />
<TextBlock x:Key="dghAge" Text="{DynamicResource Age}" x:Shared="false" />