Bonjour,
J'essaie de mettre en place une grille, mais je n'arrive pas à obtenir ce que je veux.
Ce que je veux :
Une grille avec X colonnes.
Chaque colonnes à la même taille (donc width="*").
La grille doit s'adapter à la taille de la fenêtre.
Mais la grille à une taille minimum (si la fenêtre est trop petite, alors la grille dépassera).
J'ai donc fait un essais :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ScrollTest.MainWindow"
x:Name="Window"
Title="MainWindow"
UseLayoutRounding="True"
Width="640" Height="480">
<Grid x:Name="LayoutRoot" MinHeight="400">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="1" Grid.Column="0" TextWrapping="WrapWithOverflow">
Ipsam vero urbem Byzantiorum fuisse refertissimam atque ornatissimam signis quis ignorat? Quae illi, exhausti sumptibus bellisque maximis, cum omnis Mithridaticos impetus totumque Pontum armatum affervescentem in Asiam atque erumpentem, ore repulsum et cervicibus interclusum suis sustinerent, tum, inquam, Byzantii et postea signa illa et reliqua urbis ornanemta sanctissime custodita tenuerunt.
</TextBlock>
<Button Grid.Row="0" Grid.Column="0" Margin="10" />
<Button Grid.Row="2" Grid.Column="0" Margin="10" />
</Grid>
</Window> |
Donc là pas de problème, ça fait ce que je veux. La grille s'adapte à la fenêtre, sauf si cette dernière est plus petite que 400px. Et dans le cas où elle ne s'adapte plus à la fenêtre, alors elle fera toujours 400px de haut.
Le problème est que du coup on ne vois pas tout, car une partie de la grille dépasse si la fenêtre est trop petite.
J'ai donc décidé de mettre un scrollviewer autour de la grille. Donc meme code que précédement avec <ScrollViewer></ScrollViewer> autour de <Grid x:Name="LayoutRoot" MinHeight="400">
Et là c'est le drame, plus rien ne va comme je veux. La grille s'adapte bien à la taille de la fenêtre, a bien une taille minimum. Mais si le contenu d'une case est trop grand, alors il va agrandir la case pour tout afficher, au dépends des autres cases (donc plus d'égalité de taille des cases), et en plus elle agrandi la grille si nécessaire.
Hors je veux que ce soit uniquement la fenêtre qui définisse la taille de la grille (et non son contenu) et si la fenêtre est trop petite, alors la grille fera 400px et pas plus
Pour illustrer ceci, voici dans l'ordre, ce que j'ai au départ, ensuite ce que je veux, puis ce que j'obtiens :

En fait j'ai l'impression que dès que je mets un scrollviewer, la grille et ses cases passent dans une sorte de SizeToContent.
Quelqu'un a une idée de comment obtenir ce que je veux?
Merci d'avance
Partager