Comment aligner les boutons à l'horizontale et à la propagation de l'égalité avec les xaml windows phone
J'ai une ObservableCollection qui contient ViewModel qui à son tour définit mes boutons définitions.
J'ai été à elle pendant des heures, la lecture d'articles après articles, mais en vain. J'ai essayé d'utiliser une zone de liste et c'est le plus proche que je dois. Mes boutons sont de se construire à l'horizontale, mais en supposant que je suis l'affichage de 3 boutons, je veux une affiche sur la gauche, une affiche dans le milieu et une affiche sur la droite.
<ListBox Grid.Row="2" ItemsSource="{Binding Links}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<StackPanel Background="Beige" Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Button Grid.Column="{Binding Column}"
Grid.Row="0"
Width="90"
Height="90">
<ContentControl>
<StackPanel Orientation="Vertical">
<Image Source="{Binding Image}" Width="36" Height="36"
Margin="5" Stretch="UniformToFill"
HorizontalAlignment="Center"/>
<TextBlock Text="{Binding Description}"
Foreground="#0F558E"
FontSize="18"
HorizontalAlignment="Center"/>
</StackPanel>
</ContentControl>
</Button>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
Comme vous pouvez le voir, j'ai mis de la colonne de manière dynamique à l'aide d'une propriété de mon ViewModel mais je n'ai plus une grille que je ne pouvais pas le faire fonctionner, mais, idéalement, je voudrais utiliser une grille, de sorte que je peux indiquer dans la Colonne à définir le bouton.
Lorsque j'utilise un StackPanel, il fonctionne, mais les boutons sont juste à côté de l'autre plutôt que d'être réparti de manière égale à travers toute la largeur de l'écran.
J'ai fait quelque chose de similaire à ce qui précède à l'aide de ItemsControl
et à l'aide d'une grille, et je peux voir chaque bouton s'ajouter, mais ils se chevauchent les uns les autres dans la ligne 0, col-0. Si je la lie de la ligne de la Colonne de la propriété à des fins de test, il le construire correctement mais mes boutons sont affichés sur des lignes différentes, qui n'est pas ce que je veux. Je veux que chaque bouton pour être aligné horizontalement.
Comment puis-je y parvenir? Je sais que je pourrais juste coder en dur les 3 boutons et juste changer les icônes et le texte et de gérer le code en passant par le bouton correspondant en tant que paramètre lié, mais idéalement, j'aimerais construire les boutons de façon dynamique dans une grille et placez-les à l'aide de la colonne.
Noter que le nombre de colonne serait fixé, c'est à dire 3, que je n'aurai jamais plus que cela.
Grâce.
OriginalL'auteur Thierry | 2014-10-15
Vous devez vous connecter pour publier un commentaire.
Il est source de confusion pourquoi vous ne pouvez pas utiliser cette grille, comme ce semi-pseudo-code ci-dessous, la Grille où les consomme tout l'espace horizontal. Puis, avec la grille du centre de la colonne pour être la star de la taille et pour le reste de l'espace restant être consommés une fois que le bouton 1 et le bouton 3 réglage de taille automatique dans leur espace:
Si cela échoue, la touche set un alignement horizontal à Gauche et le bouton de trois de "droit".
Que d'un côté, la zone de liste, il peut ne pas être qui s'étend à l'ensemble de la taille horizontale de l'écran. Découvrez ma réponse à un WP8 dimensionnement de la question:
ListBoxItem HorizontalContentAlignment.
nah, le son est correct pour cette simple d'une mise en page
C'est ce que j'ai fait à l'origine, mais ensuite j'ai pensé qu'il n'était pas aussi propre que si je voulais lier cela à ma collection, comme il aurait fallu assigner un nom à chaque bouton et de traiter avec le code derrière au lieu d'utiliser pur MVVM qui m'a semblé le plus approprié pour cette tâche. Fou de voir comment il est facile d'afficher verticalement. J'ai été fait en moins de 5 minutes! Pourquoi ne peut-on pas être un rapide un moyen facile de changer la disposition de l'orientation à l'intérieur d'une liste à partir de la verticale à l'horizontale?? Comme pour les étirements, c'est certainement de s'étirer. Voir la ItemContainerStyle et je peux le confirmer moi-même que cela fonctionne.
Comme pour la façon dont vous avez la grille, c'est exactement ce que j'ai ma grille définie 🙂 C'est pourquoi j'ai pensé que je voudrais vous présenter une grille dans ma liste pour voir si cela peut aider, mais non!! Je souhaite juste que je pourrais le remplir avec des boutons sur la même ligne plutôt que sur des lignes différentes, mais il juste ne fonctionnera pas, mais de la "grille" partie fonctionne exactement comme il le veux.
Qui est entendu. Autre chose est en jeu. Je vous suggère d'essayer une tente à l'extérieur de votre projet et de voir si vous pouvez obtenir l'effet désiré à l'écart de l'application principale avant d'essayer une solution dynamique, puis travailler jusqu'à. Peut-être que le processus de nu sur la question.
OriginalL'auteur ΩmegaMan
J'ai finalement trouvé la réponse à mon problème dans un article que j'ai trouvé sur le web.
Vous pouvez le vérifier ici: À l'aide de Grilles avec ItemsControl en XAML
En bref, vous avez besoin de sous-classe, le itemsControl et vous avez besoin d'écraser le GetContainerForItemOverride méthode qui permettra de prendre soin de copier les "données" de l'ItemTemplate à la ContentPresenter. Dans ce cas, la ligne et la colonne, mais à mon exigence, c'est juste la Colonne, puisque ma ligne sera toujours 0.
Ici est au cœur de la partie du code si vous ne voulez pas de vérifier l'intégralité de l'article qui résolvent le problème de commandes de réglage à l'horizontale dans une grille à l'aide ItemsControl, mais notez l'article prend soin de créer des lignes & colonnes dynamiquement, ce qui ne m'intéressent pas pour mon projet.
La finale xaml ressemble à ceci:
Une fois que j'ai utilisé le nouveau contrôle, mes boutons ont été correctement placés à l'intérieur de la grille, et, par conséquent, ont été uniformément espacées que la grille a pris soin de l'esprit de la ColumnDefinitions.
Si quelqu'un sait comment obtenir la même sans avoir à créer un nouveau contrôle et de la substitution de la méthode (en d'autres termes, pur XAML), veuillez le poster que je serais très intéressé de voir comment cela peut être fait.
Merci et merci à Robert Garfoot pour le partage de ce super code!
PS: Notez que j'ai simplifié mon code xaml dans le but de créer un échantillon de test sans aucun style sur les boutons, de sorte que ces sont plutôt gros, si vous essayez basé sur cet échantillon.
Mise à JOUR:
Petite faute de frappe correction, mais ma grille de définition de la colonne a été définie comme
mais comme @OmegaMan suggéré, pour être répartie uniformément, il doit avoir été défini comme
OriginalL'auteur Thierry