LayoutTestControl.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System;
  2. using Avalonia.Controls;
  3. using Avalonia.Layout;
  4. namespace Avalonia.Base.UnitTests.Layout
  5. {
  6. internal class LayoutTestControl : Decorator
  7. {
  8. public bool Measured { get; set; }
  9. public bool Arranged { get; set; }
  10. public Func<Layoutable, Size, Size> DoMeasureOverride { get; set; }
  11. public Func<Layoutable, Size, Size> DoArrangeOverride { get; set; }
  12. public bool CallBaseMeasure { get; set; }
  13. public bool CallBaseArrange { get; set; }
  14. protected override Size MeasureOverride(Size availableSize)
  15. {
  16. Measured = true;
  17. if (DoMeasureOverride is not null)
  18. {
  19. var overrideResult = DoMeasureOverride(this, availableSize);
  20. return CallBaseMeasure ?
  21. base.MeasureOverride(overrideResult) :
  22. overrideResult;
  23. }
  24. else
  25. {
  26. return base.MeasureOverride(availableSize);
  27. }
  28. }
  29. protected override Size ArrangeOverride(Size finalSize)
  30. {
  31. Arranged = true;
  32. if (DoArrangeOverride is not null)
  33. {
  34. var overrideResult = DoArrangeOverride(this, finalSize);
  35. return CallBaseArrange ?
  36. base.ArrangeOverride(overrideResult) :
  37. overrideResult;
  38. }
  39. else
  40. {
  41. return base.ArrangeOverride(finalSize);
  42. }
  43. }
  44. }
  45. }