[英]Why is an extra column appearing in templated DataGridColumnHeader?
嗨,有一个非常简单的WPF DataGrid布局,如下所示:
<wpftk:DataGrid Grid.Row="1"
x:Name="myOrdersGrid"
ColumnHeaderStyle="{DynamicResource FilterColumnHeaderStyle}"
CanUserResizeColumns="True"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch">
<wpftk:DataGrid.Resources>
<Style x:Key="FilterColumnHeaderStyle" TargetType="{x:Type Primitives:DataGridColumnHeader}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Primitives:DataGridColumnHeader}">
<WrapPanel Width="50" Orientation="Vertical">
<ContentPresenter Content="{TemplateBinding Content}" HorizontalAlignment="Stretch" />
<TextBox Text="Hello" FontSize="10" Background="OldLace" HorizontalAlignment="Center" />
</WrapPanel >
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</wpftk:DataGrid.Resources>
<wpftk:DataGrid.Columns>
<wpftk:DataGridTextColumn SortMemberPath="Name" Binding="{Binding Name}" IsReadOnly="True"/>
<wpftk:DataGridTextColumn SortMemberPath="Name" Binding="{Binding Price}" IsReadOnly="True"/>
</wpftk:DataGrid.Columns>
</wpftk:DataGrid>
目的是在每个标头中放置一个文本框,以充当过滤器。
但是,当渲染时,我在数据网格的中间漂浮了一个额外的文本框,如下所示:
有人知道为什么吗? 我已经进行过各种设置等工作,但无法弄清楚为什么会发生这种情况(更不用说如何解决它了……)。 多余的文本框似乎未启用/可单击,因此看起来像是某种禁用/眼镜擦的情况。
关闭AutoGenerateColumns
。 您有两个声明性列,以及要绑定到的数据项中的任何列-因此,如果要绑定到List<string>
,则将获得第三列(并且在定义DataGridColumnHeader
模板时,它将也可以在第三列中使用)。
(注意:您是否编辑过发布的代码以删除AutoGenerateColumns
?我确定第一次查看时它就在那里)。
好的,所以我找到了问题。 额外的控件似乎被放置在datagrid自动在最后定义的列与datagrid的RHS之间插入的“ filler”列中。
更好的方法是将ContentTemplate用于标头控件,如下所示:
<Style x:Key="FilterColumnHeaderStyle" TargetType="{x:Type Primitives:DataGridColumnHeader}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<WrapPanel Orientation="Vertical">
<ContentPresenter Content="{TemplateBinding Content}" HorizontalAlignment="Stretch" />
<TextBox Text="{grid:GridFilter UpdateSourceTrigger=PropertyChanged}"
Visibility="{Binding ElementName=FilterCheckbox, Path=IsChecked, Converter={StaticResource b2v}}"
FontSize="10" Width="50" Background="OldLace" HorizontalAlignment="Center" />
</WrapPanel >
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
这意味着自定义标头保留了网格中正确的样式,并包含了大拇指等,而无需在XAML中明确声明它们。
仍然有兴趣知道datagrid中的额外列是否是一个错误(出于模板目的)-我读了一篇文章,指出它已在.Net 4中修复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.