Question

Le stackpanel ne coopère pas. Nous avons une largeur fixe et un nombre variable d'éléments à placer de gauche à droite à l'intérieur.

Nous avons un contrôle d’articles qui les dispose avec un panneau de pile:

<ItemsControl x:Name="testItems"
              HorizontalAlignment="Left"
              VerticalAlignment="Top">
    <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Stacktest:ItemControl />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

Mais cela ne redimensionne pas les éléments correctement. Ils ont toujours la même taille, quel que soit l'espace disponible. S'il y a trop d'éléments, ils sont coupés à droite, plutôt que dimensionnés, de sorte qu'ils s'intègrent parfaitement. Avez-vous une idée de la façon de procéder? J'utiliserais une grille si le nombre d'éléments était constant, mais ce n'est pas le cas. C'est typiquement 1-4 articles.

Il serait bien que ItemsPanelTemplate puisse être une grille avec un nombre variable de colonnes. Mais je ne sais pas si cela (ou quelque chose avec le même résultat) est possible dans un ItemsPanelTemplate.

La solution est-elle d’écrire une sous-classe spéciale de panneau qui alloue une largeur égale aux éléments contenus?

Était-ce utile?

La solution

Je pense que ce que vous voulez, c'est l'UniformGrid. Vous pouvez indiquer qu'il a une ligne et qu'il devrait disposer tous les éléments de la même largeur. C’est peut-être pas exactement ce que vous recherchez, mais c’est le plus proche auquel je puisse penser.

Je ne sais pas si Silverlight Toolkit propose un tel composant, mais j'ai déjà lu des publications qui expliquent comment en créer un.

Le blog de Jeff Wilcox , par exemple, en contient un.

Autres conseils

Je suis probablement un peu vieille école, mais j'aime faire ce genre de chose moi-même. Vous pouvez écrire un petit code sur le backend pour déposer un nombre dynamique d’éléments dans l’espace (avec une grille), et leur attribuer une largeur dynamique espacée de manière égale.

Cela fonctionnerait probablement comme vous le souhaitez et serait modifiable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top