WPF DataGridTextColumn infobulle
-
27-10-2019 - |
Question
Y at-il un moyen d'ajouter infobulle à en-tête DataGridColumn et de conserver encore la fonctionnalité de tri. Le Code ci-dessous ne fonctionne pas (Il ne marche pas afficher l'info-bulle)
<toolkit:DataGridTextColumn Header="Test" Width="70" Binding="{Binding TestText}" ToolTipService.ToolTip="{Binding TestText}">
Et quand j'utilise le code ci-dessous
<toolkit:DataGridTemplateColumn Header="Test" Width="70">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding TestText}" ToolTip="{Binding TestText}" />
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>
La colonne perd le tri functionality..Help!
La solution
Lorsque la grille crée des colonnes automatiques, il sait quel champ est affiché dans cette colonne. Lorsque vous créez la colonne vous-même, la grille de données ne sait pas quelles sont les données que vous afficherez dans cette colonne et il ne peut pas deviner quel champ pour trier la colonne par.
Pour une colonne que vous définissez vous-même sortable, ajoutez la propriété SortMemberPath
à votre DataGridTemplateColumn
comme ceci:
<DataGridTemplateColumn Header="Test" Width="70" SortMemberPath="TestText">
...
</DataGridTemplateColumn>
Autres conseils
Pour obtenir le ToolTip
à afficher dans la DataGridColumnHeader
vous aurez besoin de lier la propriété ToolTip
pour au ToolTip
de son DataGridColumn
comme celui-ci
<toolkit:DataGridTextColumn Header="Test"
Width="70"
Binding="{Binding TestText}"
ToolTipService.ToolTip="My Tooltip Text">
<toolkit:DataGridTextColumn.HeaderStyle>
<Style TargetType="toolkit:DataGridColumnHeader">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=Column.(ToolTipService.ToolTip)}"/>
</Style>
</toolkit:DataGridTextColumn.HeaderStyle>
</toolkit:DataGridTextColumn>
Vous ajoutez une info-bulle au modèle de colonne, de ne pas l'en-tête.
Avez-vous essayé de définir la propriété HeaderStyle sur DataGridColumn à un style qui contient un modèle comprenant une info-bulle pour le HeaderCell?
réponses précédentes sont la plupart du temps correct, mais je les trouve trop compliqué ou ne portant que sur une des deux préoccupations du poste.
Tout d'abord, vous pouvez toujours définir la propriété SortPath
pour maintenir le tri pour une DataGridTemplateColumn
, ou peut-être quand vous voulez trier sur une propriété autre que ce qui est affiché.
Deuxièmement, vous n'avez pas besoin DataGridTemplateColumn
afin d'avoir une info-bulle sur la tête de colonne comme le mentionne OP. Vous pouvez utiliser une colonne de modèle si vous souhaitez ajouter une info-bulle à la cellule réelle (mais cela est probablement pas besoin non plus). Dans tous les cas, l'ajout d'une info-bulle à l'en-tête de colonne est plus facile à réaliser par le HeaderStyle
<DataGridTextColumn Header="Test" Binding="{Binding TestText}">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="ToolTip" Value="Test ToolTip" />
</Style>
</DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>