2

我想为 WPF DataGrid Column Header 编写样式。我的网格如下

`<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>

使用样式标题后不绑定。我怎么解决这个问题?

谢谢!

4

2 回答 2

6

我们可以尝试如下

<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"
                 />
于 2013-09-12T12:44:27.810 回答
1

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

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

或者您可以将您的 controlTemplate 的标签更新为拥有DynamicResource且无需提供Header

<ControlTemplate TargetType="DataGridColumnHeader">
                        <Label Content="{ DynamicResource colName}"/>
                    </ControlTemplate>
于 2013-09-12T12:15:08.267 回答