Files
Speckle.Material.Avalonia/Material.Styles/Controls/ContentExpandControl.cs
T
2022-07-12 21:43:19 +09:00

77 lines
2.2 KiB
C#

using System;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Layout;
namespace Material.Styles.Controls
{
public class ContentExpandControl : ContentControl
{
public static readonly StyledProperty<double> MultiplierProperty =
AvaloniaProperty.Register<ContentExpandControl, double>(nameof(Multiplier));
public double Multiplier
{
get => GetValue(MultiplierProperty);
set => SetValue(MultiplierProperty, value);
}
public static readonly StyledProperty<Orientation> OrientationProperty =
AvaloniaProperty.Register<ContentExpandControl, Orientation>(nameof(Orientation));
public Orientation Orientation
{
get => GetValue(OrientationProperty);
set => SetValue(OrientationProperty, value);
}
static ContentExpandControl()
{
AffectsArrange<ContentExpandControl>(MultiplierProperty,
OrientationProperty);
AffectsMeasure<ContentExpandControl>(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);
}
}
}