[WPF] Supprimer le padding des cellules d'une ListView
Ce qu'il y a de bien avec WPF, c'est toutes ces petites choses qu'on trouve coder en dur.
Prenez par exemple cette ListView avec un joli rectangle rouge de 20*20
<ListView DataContext="{StaticResource ds}" ItemsSource="{Binding}">
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Width="20" Header="">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Rectangle Width="20" Height="20" Fill="Red" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
...
Si on exécute une telle ListView, on se rend compte que notre joli rectangle ne fait que 8 pixels de largeur !
Après avoir chercher dans tous les ControlTemplate où pouvait bien se cacher ce ?*ù!$ padding, j'ai démarré mon outil préféré : Reflector.
Et voila ce que j'y ai trouvé dans la classe GridViewRowPresenter :
_defalutCellMargin = new Thickness(6.0, 0.0, 6.0, 0.0);
Hop, je sors ma calculatrice : 8 + 6 + 6 = 20 ... tiens drôle de coïncidence !? Malheureusement le hasard n’y est pour rien, la valeur de padding est bel et bien fixée en dur dans le code.
Il n’y a aucun moyen de modifier cette valeur proprement, une solution pour contourner le problème est d’affecter une marge de (-6,0,-6,0) au CellTemplate de la colonne, et hop le tour est joué !
<DataTemplate>
<Rectangle Margin="-6,0,-6,0" Width="20" Height="20" Fill="Red" />
</DataTemplate>
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :