WPF自定义数据网格列标题

8

我需要创建一个自定义数据网格DataGridTextColumn,如下图所示:

Sketch

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

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

        <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

我不知道如何创建那些文本框。任何线索都将不胜感激。
1个回答

29

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


4
我可以看到上面的XAML创建了红色文本框的位置,但是从代码中如何获取它的内容呢? - Steve
@Steve 你不是可以像平常一样将它的“Text”属性绑定到视图模型上的属性吗?实际上,这个答案甚至展示了如何做到这一点。或者如果你需要检测它何时发生变化,使用“TextChanged”事件(甚至只需订阅“PropertyChanged”事件)? - Clonkex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接