Je souhaite créer un StackPanel
personnalisé avec une propriété ReverseOrder
que je peux déclarer comme vrai pour que les éléments du StackPanel apparaissent dans l'ordre inverse de la normale (par exemple, de bas en haut ou de droite) à gauche). Il doit être réversible à la volée.Construction d'un StackPanel réversible dans WPF
Je pense à dériver une nouvelle classe de StackPanel, mais j'ai besoin de savoir quelles méthodes remplacer.
solution finale:
protected override System.Windows.Size ArrangeOverride(System.Windows.Size arrangeSize) {
double x = 0;
double y = 0;
IEnumerable<UIElement> children = ReverseOrder ? InternalChildren.Cast<UIElement>().Reverse<UIElement>() : InternalChildren.Cast<UIElement>();
foreach (UIElement child in children) {
var size = child.DesiredSize;
child.Arrange(new Rect(new Point(x, y), size));
if (Orientation == Orientation.Horizontal)
x += size.Width;
else
y += size.Height;
}
if (Orientation == Orientation.Horizontal)
return new Size(x, arrangeSize.Height);
else
return new Size(arrangeSize.Width, y);
}
définissent également et le registre ReverseOrder
et appellent UpdateLayout
si elle change.
Parfait! Merci - je n'avais même pas à penser à ça! ;) – devios1
quel effet a l'inversion des uielements? qu'arrive-t-il réellement dans ArrangeOverride comme précédemment? –