您有一个非常简单的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>
目的是将文本框放入每个标题中,以充当过滤器。
但是,当渲染时,我会在数据网格中间浮动一个额外的文本框,如下所示:
任何人都知道为什么?我玩各种各样的设置等,但无法弄清楚为什么会发生这种情况(更不用说如何解决它了....)。额外的文本框似乎没有启用/可点击,所以它看起来像是某种禁用/玻璃窗格的场景。
答案 0 :(得分:1)
关闭AutoGenerateColumns
。您有两个声明性列,以及您绑定到的数据项中的任何列 - 因此,如果您绑定到List<string>
,那么您将获得第三列(并且您已经定义了{ {1}}模板也将在第三列上使用)。
(注意:您是否已修改已发布的代码以删除DataGridColumnHeader
?我确定在我第一眼看时它就在那里。)
答案 1 :(得分:0)
好的,所以我发现了这个问题。额外控件似乎放在“填充”列中,数据网格自动在最后定义的列和数据网格的RHS之间插入。
更好的方法是使用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中明确声明它们。
仍然有兴趣知道数据网格中的额外列是否是一个bug(出于模板目的) - 我读了一篇文章,表明它已在.Net 4中修复。