J’ai besoin d’un StackPanel qui agence les éléments du bas vers le haut, mais je n’en ai trouvé aucun qui le fasse. Il ne suffit pas de mettre VerticalAlignment="Bottom" sur les éléments d’un StackPanel comme on le voit souvent recommandé, car le Z-order n’est pas correct (ça se remarque si vos éléments “grignottent” les uns sur les autres, par exemple si vous les empilez en 3D).
Voici le code que j’ai écrit, que vous êtes libres d’utiliser dans vos applications (license MS-PL):
public class ReverseStackPanel : Panel
{
protected override Size MeasureOverride(Size availableSize)
{
foreach (FrameworkElement child in Children)
{
child.Measure(availableSize);
}
return availableSize;
}
protected override Size ArrangeOverride(Size finalSize)
{
double bottom = finalSize.Height;
foreach (var child in Children)
{
child.Arrange(new Rect(0, bottom-child.DesiredSize.Height, finalSize.Width, child.DesiredSize.Height));
bottom -= child.DesiredSize.Height;
}
return finalSize;
}
}
Comments
Au final, mon code ressemble au tiens ;)