我正在尝试使用以下代码将DataColumn Header绑定到DynamicResource。
<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>
但是由于一些奇怪的原因,列标题仍为空。然而,StaticResource效果很好。 你能帮我解决一下如何将Header属性绑定到某些DynamicResource。
答案 0 :(得分:8)
试试这个:
<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的DataGrid具有DataGridColumns,它们不是Visual控件,所以它们有一些有趣的规则。其中一个有趣的规则是只有Binding属性可以是Binding - 其他一切都必须是静态的。为了避免这种情况,您可以创建一个包含动态内容的静态样式资源。
答案 1 :(得分:4)
这适用于使用词典进行国际化
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" Width="120">
<DataGridTextColumn.Header>
<TextBlock Text="{DynamicResource gridColumnHeader1}" />
</DataGridTextColumn.Header>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
答案 2 :(得分:1)
如果您只想更改标题而不想“打扰”样式,请执行此操作。 (信用证转到上面的海报)
<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>
答案 3 :(得分:1)
试试这个......
<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>