2013-03-02 19 views
6

Ich brauche unterhalb einer benutzerdefinierten Datagrid Datagridtextcolumn wie die Skizze zu erstellen:WPF Benutzerdefinierte Datagrid Spaltenkopf

Sketch

Die roten Rechtecke TextBox sind und verwendet werden, in der Spalte zu suchen.

Bisher habe ich ein Datagrid wie folgt aus (vereinfachen Version) implementiert:

 <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 

Ich habe keine Ahnung, wie man diese Textfelder erstellen. Irgendein Hinweis würde schätzen es

Antwort

23

DataGridTemplateColumn ist, was Sie suchen. Sie können die Vorlage nach Ihren Bedarf anpassen -

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

Mit Beispiel ItemsSource es gibt diesen Look -

enter image description here

EDIT

Falls Sie den Header anpassen möchten, Sie müssen HeaderTemplate für Ihre Spalte so bereitstellen -

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

Hier ist der Blick -

enter image description here