我有一个像这样的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>
当我运行应用程序时,标题文本被正确绑定,但未设置TextWrapping。我猜测DataGridTextColumn.HeaderTemplate会覆盖我的ResourceDictionary中的模板。有没有办法可以保持ResourceDictionary中标题的样式,但仍然绑定标题的Text属性?
答案 0 :(得分:1)
你要做的是基本上首先为标题设置样式,然后告诉它忘记它并使用标题的全新模板。您无法同时设置DataGridTextColumn.HeaderStyle.ContentTemplate
和DataGridTextColumn.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>