从与项目另一部分的接口,我有一个DataTable
对象,其中包含可变数量的列和行。我正在尝试设计一个DataGrid
,它将通过绑定显示表格,但会为每个列自定义列标题,并提供一些选项(标题下的TextBox
除外)。
这与之前提出的问题WPF Custom datagrid column header非常相似,只是我不想在WPF中定义列;而是在绑定期间传播到每列的列的模板。
上一个答案看起来正确,但当具有该WPF样式的DataGrid
绑定到DataTable
时,结果是一个静态单列,其中包含额外的红色边框TextBox
,加上一堆不包含文本框的绑定列:
<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>
不是让上面的WPF创建第一列,而是如何更改它以指定应该如何呈现绑定列的模板?
谢谢!
答案 0 :(得分:2)
你可以在Style
中完成<DataGrid.Resources>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Style.Triggers>
<Trigger Property="HasContent" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<StackPanel>
<TextBlock Text="{Binding Content, RelativeSource=
{RelativeSource Mode=TemplatedParent}}"/>
<TextBox BorderBrush="Red" BorderThickness="3"
Width="50" Margin="5"/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
整个DataGrid似乎还有一个“MainHeader”, 注意HasContent Trigger从Style中删除此标题。