Wpf Datagrid自定义标头
我想在Datagrid的标题行中添加一个额外的行,该行将包含文本框(用于搜索)。Wpf Datagrid自定义标头,wpf,datagrid,Wpf,Datagrid,我想在Datagrid的标题行中添加一个额外的行,该行将包含文本框(用于搜索)。 此行应直接显示在原始标题下,并与常规项目标题类似 这是我目前的代码: <Window.Resources> <Style x:Key="DataGridColumnHeaderStyle1" TargetType="{x:Type DataGridColumnHeader}"> <Setter Property="Template">
此行应直接显示在原始标题下,并与常规项目标题类似 这是我目前的代码:
<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存在的问题是,它没有获得中定义的“标题标题”。如果我理解正确,我想您需要这样的标题:
<TextBox Text="{TemplateBinding Content}" HorizontalAlignment="Stretch" BorderThickness="1" />
这会将在标题属性中键入的文本作为文本放在文本框中
编辑:
模板绑定之所以有效,是因为您正在将模板标题绑定到样式外部定义的标题。换句话说,TemplateBinding
标记以源作为实际头进行绑定
更清楚一点,TemplateBinding
与Binding RelativeSource={RelativeSource TemplatedParent}
相同。因此,这将执行一个绑定,其中源是DataGridColumnHeader。当此样式应用于数据网格时,标头将成为模板化的父级。因此,绑定只是绑定到模板化父对象的内容,即您的
这里有一个msdn的链接:我需要文本块,但你是对的。您能解释一下TemplateBinding内容是如何绑定Header属性的吗?谢谢您的回答,但是您能告诉我如何将这些文本框绑定到viewmodel并使用它们过滤每一列吗?