Je dois pouvoir remplir un stackpanel
con buttons
mais les boutons doit d'abord apparaître au bas de la pile, puis se remplir de manière ascendante. . Les boutons sont créés dynamiquement et il y en a un nombre inconnu, de sorte que le piratage visuel ne fonctionne pas. J'ai essayé de faire des essais avec des alignements verticaux, mais en vain.
Réponses
Trop de publicités?Vous pouvez également faire pivoter le StackPanel de 180 degrés pour que les boutons s'empilent de bas en haut, puis les faire pivoter à nouveau de 180 degrés pour les remettre à l'endroit :
<StackPanel>
<!-- rotate all buttons inside this panel -->
<StackPanel.Resources>
<Style TargetType="Button">
<Setter Property="LayoutTransform">
<Setter.Value>
<RotateTransform Angle="180"/>
</Setter.Value>
</Setter>
</Style>
</StackPanel.Resources>
<!-- rotate the stack panel -->
<StackPanel.LayoutTransform>
<RotateTransform Angle="180"/>
</StackPanel.LayoutTransform>
<!-- content -->
<Button>1</Button>
<Button>2</Button>
</StackPanel>
Une autre solution consiste à utiliser un DockPanel.
Il suffit de définir la valeur LastChildFill sur false dans le DockPanel.
Définissez ensuite la propriété Dock attachée à chaque bouton que vous ajoutez à Bottom avant de l'ajouter au DockPanel.
exemple :
var button = new Button();
DockPanel.SetDock(button, Dock.Bottom);
La meilleure façon de résoudre le problème est de mettre en place un conteneur personnalisé dérivé de stackpanel mais la solution la plus rapide et la plus pratique si des éléments sont ajoutés au moment de l'exécution est la suivante
public Window1()
{
InitializeComponent();
for (int i = 0; i < 10; i++)
{
Button btn = new Button();
btn.Content = "Button " + i;
MyStack.Children.Insert(0, btn);
}
}
Il suffit d'insérer un élément à la position 0 au lieu de l'ajouter.
- Réponses précédentes
- Plus de réponses