0

我有一个这样的 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 样式位于控件中导入的 ResourceDictionary 中。它看起来像这样:

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

当我运行应用程序时,标题 Text 已正确绑定,但未设置 TextWrapping。我猜 DataGridTextColumn.HeaderTemplate 会覆盖我的 ResourceDictionary 中的模板。有没有办法可以在 ResourceDictionary 中保留标题的样式但仍绑定标题的 Text 属性?

4

1 回答 1

1

您要做的基本上是首先为标题设置样式,然后告诉它忘记它并为标题使用全新的模板。你不能同时设置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>
于 2013-10-09T19:03:27.880 回答