123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- using System.Windows;
- using System.Windows.Controls;
- namespace HandyControl.Controls;
- public class AxleCanvas : Canvas
- {
- public static readonly DependencyProperty OrientationProperty = DependencyProperty.Register(
- nameof(Orientation), typeof(Orientation), typeof(AxleCanvas), new PropertyMetadata(default(Orientation)));
- public Orientation Orientation
- {
- get => (Orientation) GetValue(OrientationProperty);
- set => SetValue(OrientationProperty, value);
- }
- protected override Size ArrangeOverride(Size arrangeSize)
- {
- foreach (UIElement internalChild in InternalChildren)
- {
- if (internalChild == null) continue;
- var x = 0.0;
- var y = 0.0;
- if (Orientation == Orientation.Horizontal)
- {
- x = (arrangeSize.Width - internalChild.DesiredSize.Width) / 2;
- var top = GetTop(internalChild);
- if (!double.IsNaN(top))
- {
- y = top;
- }
- else
- {
- var bottom = GetBottom(internalChild);
- if (!double.IsNaN(bottom))
- y = arrangeSize.Height - internalChild.DesiredSize.Height - bottom;
- }
- }
- else
- {
- y = (arrangeSize.Height - internalChild.DesiredSize.Height) / 2;
- var left = GetLeft(internalChild);
- if (!double.IsNaN(left))
- {
- x = left;
- }
- else
- {
- var right = GetRight(internalChild);
- if (!double.IsNaN(right))
- x = arrangeSize.Width - internalChild.DesiredSize.Width - right;
- }
- }
- internalChild.Arrange(new Rect(new Point(x, y), internalChild.DesiredSize));
- }
- return arrangeSize;
- }
- }
|