2013-10-09 58 views
0

我有一个的DataGridColumn这样的:绑定和样式DataGridColumnHeader

<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

你能不能把'TextWrapping =“包装”'的'TextBlock'内''? – Tico

+0

是的,但是我不得不将它添加到每个列标题。理想情况下,我想将所有样式保留在ResourceDictionary中,并仅绑定控件中的标题文本。 – ConditionRacer

+0

如果你为你的DataTemplate设置一个x:Key,你会得到类似的结果。 – Tico

回答

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>