Wpf Toolkit. Привязать заголовок столбца DataGrid к DynamicResource
Я пытаюсь привязать заголовок DataColumn к 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.
4 ответа
Это работает для меня с интернационализацией с использованием словарей
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" Width="120">
<DataGridTextColumn.Header>
<TextBlock Text="{DynamicResource gridColumnHeader1}" />
</DataGridTextColumn.Header>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
Попробуй это:
<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>
DataGrid набора инструментов WPF имеет DataGridColumns, которые не являются визуальными элементами управления, поэтому у них есть несколько забавных правил. Одним из таких забавных правил является то, что только свойство Binding может быть Binding - все остальное должно быть статическим. Чтобы обойти это, вы можете создать статический ресурс стиля, который содержит динамическое содержимое.
Если вы просто хотите изменить заголовок и не хотите беспокоиться о стилях, сделайте это. (кредит переходит на вышеуказанный плакат)
<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>
Попробуй это...
<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>