Comment puis-je faire de mes Colonnes de la Grille toujours être de la même largeur?
Si je définis la largeur de la Colonne à *
, ils sont de la même largeur au départ, mais si un élément est plus grand que la quantité permise alors il va étendre la largeur de la colonne.
Comment puis-je forcer mon Grille de garder colonnes de la même taille avec explicitement la définition d'une taille?
Je ne peux pas utiliser un UniformGrid parce que cette Grille est utilisée dans un ItemsControl, et les Articles doivent être placés dans certains Grid.Row
/Grid.Column
spots
Modifier Voici un exemple de mon code actuel.
<DockPanel>
<!-- Not showing code here for simplicity -->
<local:ColumnHeaderControl DockPanel.Dock="Top" />
<local:RowHeaderControl DockPanel.Dock="Left" />
<ItemsControl ItemsSource="{Binding Events}">
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Column"
Value="{Binding DueDate.DayOfWeek,
Converter={StaticResource EnumToIntConverter}}" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</ItemsPanel>
</ItemsControl>
</DockPanel>
Edit #2 Voici ma solution finale. Il rend les colonnes de la bonne taille, et il conserve la taille correcte lors de l'application est redimensionnée.
<ColumnDefinition Width="{Binding
ElementName=RootControl,
Path=ActualWidth,
Converter={StaticResource MathConverter},
ConverterParameter=(@VALUE-150)/7}" />
150 est la largeur de la Ligne d'en-Têtes + toutes les marges et les frontières. Je suis actuellement dans le processus de mise à jour de mon MathConverter
à un IMultiValueConverter
donc je peux lier les deux paramètres (Si vous êtes intéressé par le Convertisseur de code, il peut être trouvé ici, même si c'est seulement la valeur unique convertisseur)
Vous devez vous connecter pour publier un commentaire.
Vous pourriez essayer de liaison de la largeur de vos colonnes pour une propriété qui divise la largeur totale de la fenêtre par le nombre de colonnes
Vous pouvez:
1) coder en dur une taille en DIP:
2) Utiliser SharedSizeGroup, il prend un caractère
Vous pouvez en lire plus à ce sujet ici
<Grid Grid.IsSharedSizeScope="True">
pour le milieu de la grilleJe ne l'ai pas essayé, mais je pense que cela devrait fonctionner:
XAML:
C#:
*
le permet, il s'étend de la colonne au-delà de cette taille. Le code que vous avez posté, va juste faire toutes les colonnes égale à la plus grande largeur de la colonne, et je n'en veux pas.La façon la plus propre est d'utiliser un
UniformGrid
comme ceci:Très gentille, lorsqu'il est utilisé comme
ItemsPanel
.Grid.Row
/Grid.Column
de points, et ne pas le remplir chaque carré de la grille.Essayer le IsSharedSizeScope de travail de la Grille:
J'espère que cela aide.
Pour la description détaillée de vérifier ce lien:
https://wpf.2000things.com/tag/sharedsizegroup/