2013-03-02 73 views
6

我需要创建一个自定义的数据网格DataGridTextColumn像下面的草图:WPF自定义数据网格列标题

Sketch

红色矩形是文本框和用于该列中进行搜索。

到目前为止,我已经实现了这样一个DataGrid(简化版本):

 <DataGrid x:Name="CompassLogDataGrid" 
       Grid.Row="1" 
       Style="{DynamicResource ResourceKey=DataGridStyle}" 
       IsTextSearchEnabled="True"> 

      <DataGrid.Columns> 
       <DataGridTextColumn CellStyle="{StaticResource IdCell}" 
           x:Name="ID" 
           Header="ID" 
           Foreground="Black" 
           Binding="{Binding ID}" 
           DisplayIndex="0" /> 

       <DataGridTextColumn x:Name="DateGTC" 
           Header="Date" 
           Binding="{Binding DateString}" 
           CellStyle="{StaticResource DateGTCCell}" /> 
      </DataGrid.Columns 

    </DataGrid 

我不知道如何来创建这些文本框。任何线索将不胜感激

回答

23

DataGridTemplateColumn是你在找什么。您可以自定义模板,根据自己的需要 -

<DataGrid> 
     <DataGrid.Columns> 
      <DataGridTemplateColumn> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBox BorderBrush="Red" BorderThickness="3" Margin="5"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

随着样本ItemsSource它给这个样子 -

enter image description here

编辑

如果您想自定义标题,你需要为你的专栏提供HeaderTemplate这样 -

<DataGrid> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Name}" 
           Header="{Binding HeaderName}"> 
       <DataGridTextColumn.HeaderTemplate> 
        <DataTemplate> 
         <StackPanel> 
          <TextBlock Text="{Binding Content, RelativeSource= 
             {RelativeSource Mode=TemplatedParent}}" 
             Margin="5"/> 
          <TextBox BorderBrush="Red" BorderThickness="3" 
            Width="50" Margin="5"/> 
         </StackPanel> 
        </DataTemplate> 
       </DataGridTextColumn.HeaderTemplate> 
      </DataGridTextColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

这里的样子 -

enter image description here