16 votes

WPF - définir HorizontalAlignment= Stretch pour Textbox dans StackPanel

Pourquoi une zone de texte ne s'étend-elle pas pour remplir l'espace dans un stackpanel ? Est-ce voulu ? Dans une grille, la zone de texte s'étend comme prévu.

12voto

Kent Boogaart Points 97432

Oui, c'est conçu ainsi. Le StackPanel allouera l'espace demandé par le TextBox. Si vous n'avez pas défini de largeur sur le TextBox, il n'aura besoin que de la largeur suffisante pour contenir son texte.

9voto

Gishu Points 59012

La réponse de Kent semble juste.
Pour encore forcer le remplacement du comportement de StackPanel, je pense que vous devriez dynamiquement calculer et définir la propriété Width des éléments contenus OU effectuer un remplacement funky de MeasureOverride. Je préférerais utiliser un autre gestionnaire de disposition/panneau. Quelques choses que j'ai notées..

  • La valeur par défaut des propriétés HorizontalAlignment et VerticalAlignment des éléments enfants est Stretch (si vous ne spécifiez pas explicitement une valeur).
  • Le StackPanel étirera les éléments en fonction de la valeur de sa propriété Orientation. Donc

    • Orientation=Horizontal signifie que tous les éléments seront étirés verticalement au maximum. Les éléments s'écoulent horizontalement.
    • Orientation=Vertical signifie que tous les éléments seront étirés horizontalement au maximum. Les éléments s'écoulent verticalement.
  • À moins d'être explicitement spécifiées, la largeur et la hauteur des éléments enfants sont NaN. Si vous spécifiez une valeur explicite, StackPanel les honorera par rapport aux paramètres d'alignement horizontal et vertical.
  • Le StackPanel lui-même a des propriétés HorizontalAlignment et VerticalAlignment qui ajoutent une touche de mise en page supplémentaire. Vous pouvez expérimenter avec cet exemple.

StackPanel

La valeur par défaut est Stretch à la fois pour HorizontalAlignment et VerticalAlignment du contenu contenu dans un StackPanel.

HorizontalAlignment

Lorsque les propriétés Height et Width sont explicitement définies sur un élément, ces mesures ont une priorité plus élevée lors de la mise en page et annuleront les effets typiques du réglage de HorizontalAlignment sur Stretch.

4voto

J'avais besoin que les articles soient de taille égale, mais empilés verticalement.

J'ai utilisé un UniformGrid, et j'ai défini la propriété Colonnes sur 1. (testé avec un TextBox, et cela s'étire comme vous le souhaitez)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X