问题
I'm trying to bind DataColumn Header to DynamicResource using following code.
<Window.Resources>
<sys:String x:Key="HeaderText">Header Text</sys:String>
</Window.Resources>
<Grid>
<tk:DataGrid>
<tk:DataGrid.Columns>
<tk:DataGridTextColumn Header="{DynamicResource HeaderText}" Width="100"/>
</tk:DataGrid.Columns>
</tk:DataGrid>
</Grid>
But for some strange reason column header remains empty. StaticResource however works well. Could you please help me to figure out how to bind that Header property to some DynamicResource.
回答1:
Try this:
<Window.Resources>
<sys:String x:Key="HeaderText">Header Text</sys:String>
<Style x:Key="HeaderTextStyle" TargetType="{x:Type Primitives:DataGridColumnHeader}">
<Setter Property="Content" Value="{DynamicResource HeaderText}" />
</Style>
</Window.Resources>
<Grid>
<tk:DataGrid>
<tk:DataGrid.Columns>
<tk:DataGridTextColumn HeaderStyle="{StaticResource HeaderTextStyle}" Width="100"/>
</tk:DataGrid.Columns>
</tk:DataGrid>
</Grid>
WPF Toolkit's DataGrid has DataGridColumns which are not Visual controls, so they have some funny rules. One of those funny rules is that only the Binding property can be a Binding - everything else must be static. To circumvent this, you can create a Static Style Resource which contains Dynamic Content.
回答2:
this works for me with internationalization using dictionaries
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" Width="120">
<DataGridTextColumn.Header>
<TextBlock Text="{DynamicResource gridColumnHeader1}" />
</DataGridTextColumn.Header>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
回答3:
If you just want to change the Header and dont' want to bother with styles, do this. (credit goes to above poster)
<Window.Resources>
<sys:String x:Key="HeaderText">Header Text</sys:String>
<TextBlock x:Key="HeaderSR" Text="{DynamicResource HeaderText}"/>
</Window.Resources>
<Grid>
<tk:DataGrid>
<tk:DataGrid.Columns>
<tk:DataGridTextColumn Header="{StaticResource HeaderSR}" Width="100"/>
</tk:DataGrid.Columns>
</tk:DataGrid>
</Grid>
回答4:
Try this...
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding InputDate,Mode=OneWay,StringFormat='{}{0:dd MMM yy}'}" Width="70" >
<DataGridTextColumn.Header>
<TextBlock Text="{DynamicResource ResourceKey=inputDate}" />
</DataGridTextColumn.Header>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
来源:https://stackoverflow.com/questions/652240/wpf-toolkit-bind-datagrid-column-header-to-dynamicresource