我创建了一个继承自 datagridcolumnheader 的类。我设置了它的样式(现在使用原始 datagridcolumnheader 的默认样式)但我不知道如何强制我的列使用这个 customDatagridcolumnHeader。
我试过这个:
<DataGridTextColumn Binding="{Binding Donateur}" Width="*">
<DataGridTextColumn.Header>
<local:CustomDatagridColumnHeader/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
它不起作用,我明白为什么。如何做这样的事情?我试图修改默认的 DatagridColumnHeadersPresenter,但它只有两个部分,PART_FillerColumnHeader(我可以替换)和 itemsPresenter。目的是在新类上添加属性、函数和事件(只是试图为过滤器提供文本框,但不是针对所有列,也不是针对所有数据网格)。我“认为”我可以通过直接继承数据网格,然后通过树找到文本框来找到一种方法,但这对于我想做的所有事情都不是很实用(比如隐藏一列的文本框)
编辑:这是未来的模板
<Style TargetType="local:RafDatagridColumnHeader">
<Style.Resources>
<local:IsNotNothingConverter x:Key="IsNotNothingConverter"/>
<local:IsNotNothingToVisibilityConverter x:Key="IsNotNothingToVisibilityConverter"/>
</Style.Resources>
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock TextWrapping="Wrap" Text="{Binding}" VerticalAlignment="Center"></TextBlock>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:RafDatagridColumnHeader">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0" Visibility="{Binding Column, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:RafDatagridColumnHeader}, Converter={StaticResource IsNotNothingToVisibilityConverter}}">
<TextBox HorizontalAlignment="Stretch" Margin="3"/>
</Grid>
<theme:DataGridHeaderBorder Grid.Row="1" SortDirection="{TemplateBinding SortDirection}"
IsHovered="{TemplateBinding IsMouseOver}"
IsPressed="{TemplateBinding IsPressed}"
IsClickable="{TemplateBinding CanUserSort}"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding ="{TemplateBinding Padding}"
SeparatorVisibility="{TemplateBinding SeparatorVisibility}"
SeparatorBrush="{TemplateBinding SeparatorBrush}" VerticalAlignment="Stretch">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
RecognizesAccessKey="True" />
</theme:DataGridHeaderBorder>
<Thumb x:Name="PART_LeftHeaderGripper" Grid.Row="1"
HorizontalAlignment="Left"
Style="{StaticResource ColumnHeaderGripperStyle}"/>
<Thumb x:Name="PART_RightHeaderGripper" Grid.Row="1"
HorizontalAlignment="Right"
Style="{StaticResource ColumnHeaderGripperStyle}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
如果我修改控件 DataTemplate 而不是模板本身,我将失去列标题的所有好东西(排序、排序字形、拇指改变宽度、重新排序......)好吧,事实上,我不会,但文本框将在标题内,排序字形将在顶部...顺便说一句,它更好,更具可读性