如何将样式写入WPF DataGridColumnHeader

时间:2013-09-12 12:00:20

标签: c# css wpf xaml datagrid

我想为WPF DataGrid列标题编写样式。我的网格如下

`<DataGrid >
    <DataGrid.Columns>
        <DataGridTemplateColumn>
              <DataGridTemplateColumn.HeaderTemplate>
                 <DataTemplate>
                      <Label Content="{DynamicResource colName}"></Label>
                 </DataTemplate>
              </DataGridTemplateColumn.HeaderTemplate>
         </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>`

我想使用DynamicResource绑定标签内容。此代码正常运行。我想写一个样式来将此绑定方法应用于网格列。我扭曲了一种风格如下。

`<Style x:Key="ColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}" > 
     <Setter Property="Template">
            <Setter.Value>
                  <ControlTemplate TargetType="DataGridColumnHeader">
                           <Label Content="{ TemplateBinding Content}"/>
                   </ControlTemplate>
             </Setter.Value>
       </Setter>
</Style>`

我将此样式应用于网格,如下所示。

<DataGrid >
     <DataGrid.Columns>
          <DataGridTextColumn  HeaderStyle="{StaticResource ColumnHeaderStyle}" Header="{ DynamicResource colName}"  />
     </DataGrid.Columns>
</DataGrid>

使用样式标题后不绑定。我该如何解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:5)

我们可以尝试如下

<Style x:Key="ColumnHeaderStyle" TargetType="{x:Type dg:DataGridColumnHeader}">
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Background" Value="Black" />
    <Setter Property="Foreground" Value="White" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="dg:DataGridColumnHeader">   
                <dg:DataGridHeaderBorder
                x:Name="headerBorder"                      
                Background="Red">
                <Border BorderThickness="1" 
                        CornerRadius="2" 
                        Background="Black"
                        BorderBrush="Green">                            
                    <Grid>
                        <TextBlock Text="{TemplateBinding  Content}" 
                                   VerticalAlignment="Center" 
                                   HorizontalAlignment="Center" 
                                   TextWrapping="Wrap"/>                                
                        </Grid>                                
                </Border>
                </dg:DataGridHeaderBorder>

            </ControlTemplate>
        </Setter.Value>
    </Setter>                 
</Style>
<dg:DataGrid Grid.Row="1" Grid.RowSpan="1" 
                 Name="UserName"                      
                 HorizontalAlignment="Left"
                 AutoGenerateColumns="True"
                 Width="800"                       
                 Background="Yellow"
                 ColumnHeaderHeight="20"                       
                 ColumnHeaderStyle="{DynamicResource ColumnHeaderStyle}"
                 RowStyle="{StaticResource RowStyle}"
                 CanUserAddRows="False"
                 CanUserDeleteRows="False"
                 />

答案 1 :(得分:1)

Header定义为StaticResource而非动态。这将解决您的问题

<DataGridTextColumn  HeaderStyle="{StaticResource ColumnHeaderStyle}" Header="{ StaticResource colName}"  />

或者您可以将controlTemplate的标签更新为DynamicResource,然后无需提供Header

<ControlTemplate TargetType="DataGridColumnHeader">
                        <Label Content="{ DynamicResource colName}"/>
                    </ControlTemplate>