WPF DataGrid HeaderTemplate Mysterious Padding

Je place un seul bouton avec une image dans l’en-tête d’une colonne d’un DataGrid. Le modèle de cellule est également un simple bouton avec une image.

            

Lors du rendu, l’en-tête comporte approximativement 10 à 15 pixels de remplissage sur le côté droit uniquement, ce qui oblige les cellules à s’afficher à cette largeur, ce qui laisse un espace vide sur le bouton de cellule des deux côtés. Étant un perfectionniste au pixel, cela m’agace énormément. J’avais d’abord pensé qu’il s’agissait d’un espace pour les flèches affichées lors du sorting, mais le sorting est désactivé sur l’ensemble de la grid de données et de manière explicite sur la colonne.

Voici une image: http://img716.imageshack.us/img716/1787/68487749.png

Je suppose que cela vient de l’élément parent du bouton. Est-ce que quelqu’un sait un moyen de l’éliminer?


Voir:

  • http://soffr.miximages.com/c%23//
  • http://soffr.miximages.com/c%23//

Solution:

                     

Snoop à la rescousse!

Maintenant que vous avez mis à jour la question, j’ai trouvé un code intéressant dans DataGridHeaderBorder.cs :

  protected override Size ArrangeOverride(Size arrangeSize) { //... if (padding.Equals(new Thickness())) { padding = DefaultPadding; } //... child.Arrange(new Rect(padding.Left, padding.Top, childWidth, childHeight)); } 

Où DefaultPadding n’est pas égal à 0 … Même s’ils n’utilisent pas le rembourrage standard, ils organisent l’enfant légèrement déplacé.

Comment régler ceci? Peut-être que l’écriture de votre propre modèle pour l’en-tête de la table fera l’affaire. Ou vous pouvez essayer des marges négatives pour l’image. Ne pas aimer ni de cette approche. Mais je ne trouve rien de mieux pour le moment.

Utiliser Padding = “0,0.000001,0,0” semble marcher autour de leur code de vérification et fonctionne (au moins dans .NET 4.0).