diff --git a/src/Shared/HandyControl_Shared/Controls/Panel/SimpleStackPanel.cs b/src/Shared/HandyControl_Shared/Controls/Panel/SimpleStackPanel.cs
new file mode 100644
index 00000000..6fa5f209
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Controls/Panel/SimpleStackPanel.cs
@@ -0,0 +1,101 @@
+using System;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace HandyControl.Controls
+{
+ public class SimpleStackPanel : Panel
+ {
+ public static readonly DependencyProperty OrientationProperty =
+ StackPanel.OrientationProperty.AddOwner(typeof(SimpleStackPanel),
+ new FrameworkPropertyMetadata(Orientation.Vertical, FrameworkPropertyMetadataOptions.AffectsMeasure));
+
+ public Orientation Orientation
+ {
+ get => (Orientation) GetValue(OrientationProperty);
+ set => SetValue(OrientationProperty, value);
+ }
+
+ protected override Size MeasureOverride(Size constraint)
+ {
+ var stackDesiredSize = new Size();
+ var children = InternalChildren;
+ var layoutSlotSize = constraint;
+
+ if (Orientation == Orientation.Horizontal)
+ {
+ layoutSlotSize.Width = double.PositiveInfinity;
+
+ for (int i = 0, count = children.Count; i < count; ++i)
+ {
+ var child = children[i];
+ if (child == null) continue;
+
+ child.Measure(layoutSlotSize);
+ var childDesiredSize = child.DesiredSize;
+
+ stackDesiredSize.Width += childDesiredSize.Width;
+ stackDesiredSize.Height = Math.Max(stackDesiredSize.Height, childDesiredSize.Height);
+ }
+ }
+ else
+ {
+ layoutSlotSize.Height = double.PositiveInfinity;
+
+ for (int i = 0, count = children.Count; i < count; ++i)
+ {
+ var child = children[i];
+ if (child == null) continue;
+
+ child.Measure(layoutSlotSize);
+ var childDesiredSize = child.DesiredSize;
+
+ stackDesiredSize.Width = Math.Max(stackDesiredSize.Width, childDesiredSize.Width);
+ stackDesiredSize.Height += childDesiredSize.Height;
+ }
+ }
+
+ return stackDesiredSize;
+ }
+
+ protected override Size ArrangeOverride(Size arrangeSize)
+ {
+ var children = InternalChildren;
+ var rcChild = new Rect(arrangeSize);
+ var previousChildSize = 0.0;
+
+ if (Orientation == Orientation.Horizontal)
+ {
+ for (int i = 0, count = children.Count; i < count; ++i)
+ {
+ var child = children[i];
+ if (child == null) continue;
+
+ rcChild.X += previousChildSize;
+ previousChildSize = child.DesiredSize.Width;
+ rcChild.Width = previousChildSize;
+ rcChild.Height = Math.Max(arrangeSize.Height, child.DesiredSize.Height);
+
+ child.Arrange(rcChild);
+ }
+ }
+ else
+ {
+ for (int i = 0, count = children.Count; i < count; ++i)
+ {
+ var child = children[i];
+ if (child == null) continue;
+
+ rcChild.Y += previousChildSize;
+ previousChildSize = child.DesiredSize.Height;
+ rcChild.Height = previousChildSize;
+ rcChild.Width = Math.Max(arrangeSize.Width, child.DesiredSize.Width);
+
+ child.Arrange(rcChild);
+ }
+ }
+
+ return arrangeSize;
+ }
+ }
+}
diff --git a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
index 894864b9..5bc91cfa 100644
--- a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
+++ b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems
@@ -46,6 +46,7 @@
+