Comment faire WPF wrappanel les éléments enfants de s'étirer?
J'aimerais créer un ItemsControl
où les éléments enfants sont placés comme un WrapPanel
, mais les Éléments enfants devraient prendre autant d'espace qu'il peut. De sorte que, lorsque la taille de la fenêtre devient plus grande ou plus petite, les éléments enfants devrait s'étirer selon une certaine largeur:ratio de hauteur. Lorsque l'enfant les éléments ajoutés ou retirés de la ItemsControl
's ItemsSource
, le WrapPanel
devraient place mais les sauts de ligne entre les éléments de manière appropriée pour garder enfant de l'élément de largeur:le rapport hauteur.
Voici ce que j'ai jusqu'à présent. Est-il possible de le faire dans le code Xaml? ou devrais-je créer un contrôle personnalisé pour cela? Merci à l'avance!
<Window>
<Grid>
<ItemsControl ItemsSource="{Binding DataCollection}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Stretch">
<StackPanel Orientation="Horizontal" >
<TextBlock TextWrapping="Wrap" Text="{Binding Name}" />
<TextBlock TextWrapping="Wrap" Text="{Binding Value}"/>
<TextBlock TextWrapping="Wrap" Text="{Binding Time, StringFormat='hh:mm:ss' }"/>
</StackPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Window>
Je pense que c'est un peu différent de ce dont j'ai besoin, mais merci!
Envelopper et de la pile de panneaux intentionnellement de prendre le moins de place possible. Autant que je l'ai vu, vous ne pouvez pas remplacer ce comportement, de sorte que vous devez utiliser un autre type de regroupement de contrôle.
OriginalL'auteur Yeonho | 2011-11-04
Vous devez vous connecter pour publier un commentaire.
Utiliser un
UniformGrid
plutôt qu'unWrapPanel
. Il suffit de régler le nombre de colonnes que vous voulez avec laColumns
de la propriété, et il devrait vous donner le résultat souhaité.OriginalL'auteur Thomas Levesque
Comme une autre solution (parfois largeur peut être différent, donc
UniformGrid
ne fonctionne pas), ici, est modifiéWrapPanel
qui étendrait les éléments de lignes (tout en gardant la même proportion):En action:
désolé si “l'étirement des éléments” était trompeur, je ne voulais pas dire de mise à l'échelle, si c'est ce que tu veux dire. Au lieu de cela, il augmente tout simplement largeurs, soit proportionnellement ou à montant fixe pour chaque élément. Si, au contraire, vous souhaitez réorganiser ces espaces vides sur chaque extrémité des lignes de manière égale entre les éléments, je peux ajuster le code et le copier comme une réponse à votre question.
Oh, merci beaucoup pour votre suggestion. Pouvez-vous comprendre exactement ce dont j'ai besoin? Parce que mon groupe a limité, peu d'espace, je dois utiliser l'espace vide pour afficher des choses autant que possible.Comme votre image, Tous les enfants sont des boutons avec des longueurs différentes selon le contenu du texte comme votre france, de l'avenir, de chocolat, de baiser et ainsi de suite. - Je fournir un bounty qui a fourni le lien, mais si vous faites une réponse à ma question, je vais upvote vos réponses par le biais de votre profil en tant que non-officiel de la bounty, parce qu'elle serait la solution pour moi. Merci!!!!
Pour vous aider à comprendre ce que je veux, si j'ai un espace vide(4 longueur du texte) et j'ai un élément de texte "star", je veux que le panneau de ré-organiser la "star" de l'élément dans le vide de l'espace(4 longueur du texte) afin de maximiser la capacité de l'espace limité. Si la longueur du texte est de moins de 4 comme 3, 2, c'est ok, mais 4 de la longueur de l'élément a une plus grande priorité à l'efficacité. C'est simple idée..Parce que mon grand est juste la bio-chimie et de l'auto-apprentissage avec internet pour un projet à but non lucratif, la personnalisation par me serait vraiment difficile. Je suis profondément reconnaissant de votre temps et de votre contribution.
oh, je vois ce que tu veux dire maintenant... C'est un travail intéressant, je vais essayer de trouver un moyen de les résoudre.
OriginalL'auteur Surfin Bird
Avez-vous essayé le HorizontalContentAlignment="Stretch" de la propriété dans le itemscontrol.
U peut poster tout le code dans le DataTemplate.
J'ai posté le code entier dans DataTemplate, merci
comme je peux voir HorizontalContentAlignment="Stretch" serait de travailler.
OriginalL'auteur Tan
Pour obtenir le comportement souhaité, vous pouvez essayer d'utiliser
Width
ouMaxWidth
propriétés deWrapPanel
, par exemple, par ce moyen,Il fonctionne
OriginalL'auteur Makeman