您好我正在尝试实现一种在DataGrid中过滤我的记录的方法。我的想法是将TextBoxes放在每列的标题中。
我这样做取决于是否按下了ToggleButton,但是我在标题中应用样式的方式存在问题。
如果我在DataGridColumn中应用样式,如下所示:
<DataGridTextColumn>
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
(...)
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
它会完美运作!
但如果尝试将其放入Style中,我就是这样做的:
<Style TargetType="{x:Type DataGridTextColumn}">
<Setter Property="Template">
<ControlTemplate>
(...)
</ControlTemplate>
</Setter>
</Style>
通过使用ControlTemplate,我们将覆盖背景和DataGridColumnHeader的所有Default布局,我不希望这样。我怎么能这样做?
我真的想要这样做以避免在XAML中重复代码。
提前致谢!
答案 0 :(得分:2)
如果你不使用DataTemplate方法的唯一原因是你想要定义一次(在某个中心位置)然后在多个地方(例如多列)使用它,你可以将DataTemplate移动到资源部分,为其分配资源键并随时使用它。
方法如下:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="300" Width="300" Loaded="Window_Loaded">
<Window.Resources>
<DataTemplate x:Key="MySpecialHeaderTemplate">
<TextBox Text="Search..." />
</DataTemplate>
</Window.Resources>
<Grid>
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding Id}" />
<DataGridTextColumn HeaderTemplate="{StaticResource MySpecialHeaderTemplate}"
Binding="{Binding Name}" />
<DataGridTextColumn HeaderTemplate="{StaticResource MySpecialHeaderTemplate}"
Binding="{Binding Age}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>