using System; using Avalonia; using Avalonia.Controls; using Avalonia.Layout; namespace Material.Styles.Controls { public class ContentExpandControl : ContentControl { public static readonly StyledProperty MultiplierProperty = AvaloniaProperty.Register(nameof(Multiplier)); public double Multiplier { get => GetValue(MultiplierProperty); set => SetValue(MultiplierProperty, value); } public static readonly StyledProperty OrientationProperty = AvaloniaProperty.Register(nameof(Orientation)); public Orientation Orientation { get => GetValue(OrientationProperty); set => SetValue(OrientationProperty, value); } static ContentExpandControl() { AffectsArrange(MultiplierProperty, OrientationProperty); AffectsMeasure(MultiplierProperty, OrientationProperty); } protected override void ArrangeCore(Rect finalRect) { base.ArrangeCore(finalRect); } protected override Size MeasureCore(Size availableSize) { var result = base.MeasureCore(availableSize); return result; } protected override Size ArrangeOverride(Size finalSize) { var result = base.ArrangeOverride(finalSize); return result; } protected override Size MeasureOverride(Size availableSize) { var result = base.MeasureOverride(availableSize); var w = result.Width; var h = result.Height; switch (Orientation) { case Orientation.Horizontal: w *= Multiplier; break; case Orientation.Vertical: h *= Multiplier; break; default: throw new ArgumentOutOfRangeException(); } return new Size(w, h); } } }