2011-05-17 105 views
1

我想向Datagrid的包含文本框(用於搜索)的標題行添加額外的行。
此行應直接顯示在原始標題下方,並且看起來像常規項目標題。Datagrid自定義標題

這是我到目前爲止的代碼:

<Window.Resources> 
     <Style x:Key="DataGridColumnHeaderStyle1" TargetType="{x:Type DataGridColumnHeader}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type DataGridColumnHeader}"> 

         <Grid VerticalAlignment="Center" HorizontalAlignment="Stretch"> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="*"/> 
           <RowDefinition Height="*"/> 
          </Grid.RowDefinitions> 
          <TextBlock Grid.Row="0" Text="" HorizontalAlignment="Stretch"/> 
          <Grid Grid.Row="1"> 
           <TextBox Text="" HorizontalAlignment="Stretch" BorderThickness="1" /> 
          </Grid> 
         </Grid> 

        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 

    <Grid x:Name="LayoutRoot"> 
     <DataGrid x:Name="dataGrid" Height="157" Width="600" Margin="8,8,24,0" 
        VerticalAlignment="Top" 
        AutoGenerateColumns="False" 
        ColumnHeaderStyle="{DynamicResource DataGridColumnHeaderStyle1}" 
        ItemsSource="{Binding}" CanUserAddRows="False" 
        > 

      <DataGrid.Columns> 
       <DataGridTextColumn Header="Header1" Binding="{Binding Id}" Width="100" /> 
       <DataGridTextColumn Header="Header2" Binding="{Binding Name}" Width="100"/> 
       <DataGridTextColumn Header="Header3" Binding="{Binding Phone}" Width="100"/> 
       <DataGridTextColumn Header="Header4" Binding="{Binding Address}" Width="100"/> 
       <DataGridTextColumn Header="Header5" Binding="{Binding Description}" Width="*"/> 
      </DataGrid.Columns> 
     </DataGrid> 
    </Grid> 
</Window> 

與我的ContentTemplate,它並沒有得到「頭題」,即在規定的問題。

回答

2

如果我理解正確的話,我想你想是這樣的:

<TextBox Text="{TemplateBinding Content}" HorizontalAlignment="Stretch" BorderThickness="1" /> 

這讓你輸入的標題屬性作爲在文本框中的文本。

編輯: 模板綁定的工作原理是因爲您正在將模板標題與您在樣式外定義的標題進行綁定。換句話說,TemplateBinding標記與源代碼綁定爲實際標頭。

爲了更清楚些,TemplateBindingBinding RelativeSource={RelativeSource TemplatedParent}}相同。所以這會做一個綁定,其源是一個DataGridColumnHeader。當這種風格應用於數據網格時,標題將成爲模板化父項。因此,結合簡單地結合到模板父這是您的<DataGridTextColumn Header="Header1" Binding="{Binding Id}" Width="100" />

這裏的內容是一個鏈接的MSDN:TemplateBinding

+0

我需要的文本塊,但你是對的。你能解釋一下TemplateBinding Content如何綁定Header屬性? – 2011-05-17 18:49:50

+0

感謝您的偉大答案,但是請問我如何將這些文本框綁定到視圖模型並使用它們過濾每一列? – 2012-04-15 09:50:47