绑定和设置数据网格列标题的样式

本文关键字:标题 样式 网格 置数据 绑定 | 更新日期: 2023-09-27 18:34:31

>我有一个像这样的DataGridColumn:

<DataGridTextColumn
    Binding="{Binding
        Path=Name,
        UpdateSourceTrigger=PropertyChanged}"
    HeaderStyle="{StaticResource HeaderWrapped}">
    <DataGridTextColumn.HeaderTemplate>
        <DataTemplate>
            <TextBlock
                Text="{Binding
                    Path=DataContext.Name,
                    RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
        </DataTemplate>
    </DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>

HeaderWrapped 样式位于控件中导入的资源字典中。它看起来像这样:

<Style x:Key="HeaderWrapped" TargetType="DataGridColumnHeader">
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock TextWrapping="Wrap" Text="{TemplateBinding Content}" />
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

当我运行应用程序时,标题文本已正确绑定,但未设置文本换行。我猜 DataGridTextColumn.HeaderTemplate 覆盖了我的 ResourceDictionary 中的模板。有没有办法让我在资源字典中保留标题的样式,但仍绑定标题的 Text 属性?

绑定和设置数据网格列标题的样式

您尝试做的基本上是首先为标题设置样式,然后告诉它忘记它并为标题使用全新的模板。 不能同时设置DataGridTextColumn.HeaderStyle.ContentTemplateDataGridTextColumn.HeaderTemplate

但是,我可以想到解决此问题的一种解决方法:

<DataGridTextColumn
    Binding="{Binding
        Path=Name,
        UpdateSourceTrigger=PropertyChanged}"
    Tag="{Binding 
         Path=DataContext.Name,
         RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
    HeaderStyle="{StaticResource HeaderWrapped}">
</DataGridTextColumn>
<Style x:Key="HeaderWrapped" TargetType="DataGridColumnHeader">
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock TextWrapping="Wrap" Text="{TemplateBinding Tag}" />
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>