Wpf工具包.将DataGrid列标题绑定到DynamicResource

Ole*_*leg 6 wpf datagrid wpftoolkit dynamicresource

我正在尝试使用以下代码将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>
Run Code Online (Sandbox Code Playgroud)

但由于一些奇怪的原因,列标题仍为空.然而,StaticResource效果很好.你能帮我弄清楚如何将Header属性绑定到某些DynamicResource.

van*_*ja. 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>
Run Code Online (Sandbox Code Playgroud)

WPF Toolkit的DataGrid具有DataGridColumns,它们不是Visual控件,所以它们有一些有趣的规则.其中一个有趣的规则是只有Binding属性可以是Binding - 其他一切都必须是静态的.为了避免这种情况,您可以创建包含动态内容的静态样式资源.


小智 6

这对我来说使用字典进行国际化是有用的

<DataGrid>
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{x:Null}" Width="120">
            <DataGridTextColumn.Header>
                <TextBlock Text="{DynamicResource gridColumnHeader1}" />
            </DataGridTextColumn.Header>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)