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
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 ?
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
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.
Si tu pouvais nous montrer comment, cela pourrait servir à d'autre
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
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 ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Un ordinateur fait ce qu'on lui demande, et c'est bien le problème.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager