Bonjour
Est-il possible de définir une taille "automatique" à la largeur d'une colonne de gridView ?
Par exemple, je voudrais que la dernière colonne occupe la totalité de l'espace disponible restant
Version imprimable
Bonjour
Est-il possible de définir une taille "automatique" à la largeur d'une colonne de gridView ?
Par exemple, je voudrais que la dernière colonne occupe la totalité de l'espace disponible restant
En définissant la taille de la colonne à Auto ?
j'ai essayé mais ça ne compilait pas. Valeur non valide, ou quelque chose comme ça... Hum... J'ai du faire une erreur quelque part :? . Je refais un essai...
j'avais fait une erreur...
mais ce n'est pas ça, avec la valeur Auto, la largeur s'adapte à son contenu. Par contre en la combinant avec un style appliqué au gridView, je devrais pouvoir atteindre mon but.
c'est bon, je suis parvenu à mon but .:yaisse:
Si tu pouvais nous montrer comment, cela pourrait servir à d'autre ;)
En fait je n'ai pas réussi à faire qu'une colonne occupe toute la largeur restante.
Le problème que j'avais était le suivant :
j'ai défini des styles pour les en-tête. le problème était que si l'utilisateur agrandissait la fenêtre, le gridView s'agrandissait aussi. Mais sur l'espace supplémentaire le style du système s'appliquait à l'en-tête. J'avais donc un gridView tout moche.
Ce que j'ai fait :
j'ai défini un style que j'ai utilisé pour la propriété ColumnHeaderContainerStyle du gridView et un autre que j'ai appliqué aux colonne (propriété HeaderContainerStyle)
Voilà. Comme ça mon tableau paraît occuper toute la largeur, même si ce n'est pas vraiment le cas.
Ceci dit, si quelqu'un connais un moyen pour qu'une colonne occupe l'espace disponible restant, je suis preneur.
La réponse arrive sans doute un peu tard mais on peu le faire en utilisant un converter.
Par exemple :
Du coup après dans le XAML on arrive à quelquechose comme çaCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public class WidthConvertor : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { ListView l = value as ListView; GridView g = l.View as GridView; double total = 0; for (int i = 0; i < g.Columns.Count - 1; i++) // Tout sauf la dernière colonne { total += i ; } return (l.ActualWidth - total); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }
Il ne reste plus qu'à réagir aux événement de changement de taille.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 <ListView> <ListView.Resources> <local:WidthConvertor x:Key="test"/> </ListView.Resources> <ListView.View> <GridView > <GridViewColumn Header="Date" Width="50" /> <GridViewColumn Header="Date" Width="50" /> <GridViewColumn Header="Date" Width="50" /> <GridViewColumn Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView} }, Converter={StaticResource test}}"> </ListView.View> </ListView>
C'est bon :king:, merci