繁体   English   中英

WPF动态DataGrid标头

[英]WPF Dynamic DataGrid headers

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

字符串资源位于某个单独的文件中,当我仅将其交换为具有相同键但带有其他某种语言的文本的其他文件时,标题就会更改。

一切都很好,直到需要在两个地方使用相同的资源。 我在两个TabItem具有相同的DataGrid 当我打开第一个时,标题将正常显示,然后切换到另一个选项卡,标题也将显示在其中。 现在,当我改回到第一个TabItem ,标题为空。 如果我先打开第二个选项卡,也会发生同样的事情-当我切换到第一个选项卡然后又回到第二个选项卡时,标题为空。

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

资源在资源字典中,作为XAML文件。

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

<TextBlock x:Key="dghName" Text="{DynamicResource Name}" x:Shared="false" />
<TextBlock x:Key="dghAge" Text="{DynamicResource Age}" x:Shared="false" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM