From 1ced150c6978fd21cc92b7bb284cbab978757329 Mon Sep 17 00:00:00 2001 From: hhchaos Date: Thu, 10 Feb 2022 17:37:10 +0800 Subject: [PATCH 1/2] Fix the bug of incorrect aspect ratio in some cases caused by the timing of updating the layout of the controls --- .../ImageCropper/ImageCropper.Events.cs | 14 +++++++++++--- .../ImageCropper/ImageCropper.Logic.cs | 6 ++++++ .../ImageCropper/ImageCropper.cs | 1 + 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Controls.Media/ImageCropper/ImageCropper.Events.cs b/Microsoft.Toolkit.Uwp.UI.Controls.Media/ImageCropper/ImageCropper.Events.cs index a8a7109c735..68b22851bdf 100644 --- a/Microsoft.Toolkit.Uwp.UI.Controls.Media/ImageCropper/ImageCropper.Events.cs +++ b/Microsoft.Toolkit.Uwp.UI.Controls.Media/ImageCropper/ImageCropper.Events.cs @@ -166,13 +166,21 @@ private void SourceImage_ManipulationDelta(object sender, ManipulationDeltaRoute private void ImageCanvas_SizeChanged(object sender, SizeChangedEventArgs e) { - if (Source == null) + if (Source == null || !IsValidRect(CanvasRect)) { return; } - UpdateImageLayout(); - UpdateMaskArea(); + if (_lazyInitImageLayoutAction != null) + { + _lazyInitImageLayoutAction?.Invoke(); + _lazyInitImageLayoutAction = null; + } + else + { + UpdateImageLayout(); + UpdateMaskArea(); + } } } } \ No newline at end of file diff --git a/Microsoft.Toolkit.Uwp.UI.Controls.Media/ImageCropper/ImageCropper.Logic.cs b/Microsoft.Toolkit.Uwp.UI.Controls.Media/ImageCropper/ImageCropper.Logic.cs index 47f87baed84..3eadd206d02 100644 --- a/Microsoft.Toolkit.Uwp.UI.Controls.Media/ImageCropper/ImageCropper.Logic.cs +++ b/Microsoft.Toolkit.Uwp.UI.Controls.Media/ImageCropper/ImageCropper.Logic.cs @@ -23,6 +23,12 @@ public partial class ImageCropper /// Whether animation is enabled. private void InitImageLayout(bool animate = false) { + if (!IsValidRect(CanvasRect)) + { + _lazyInitImageLayoutAction = () => InitImageLayout(animate); + return; + } + if (Source != null) { _restrictedCropRect = new Rect(0, 0, Source.PixelWidth, Source.PixelHeight); diff --git a/Microsoft.Toolkit.Uwp.UI.Controls.Media/ImageCropper/ImageCropper.cs b/Microsoft.Toolkit.Uwp.UI.Controls.Media/ImageCropper/ImageCropper.cs index 60ed065fbdd..cf68b2ea686 100644 --- a/Microsoft.Toolkit.Uwp.UI.Controls.Media/ImageCropper/ImageCropper.cs +++ b/Microsoft.Toolkit.Uwp.UI.Controls.Media/ImageCropper/ImageCropper.cs @@ -59,6 +59,7 @@ public partial class ImageCropper : Control private RectangleGeometry _outerGeometry; private Geometry _innerGeometry; private TimeSpan _animationDuration = TimeSpan.FromSeconds(0.3); + private Action _lazyInitImageLayoutAction; /// /// Initializes a new instance of the class. From 1bfb9a03d224e90b12a59c5199eabd1a40918976 Mon Sep 17 00:00:00 2001 From: hhchaos Date: Thu, 10 Feb 2022 18:25:52 +0800 Subject: [PATCH 2/2] Update --- .../ImageCropper/ImageCropper.Events.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Controls.Media/ImageCropper/ImageCropper.Events.cs b/Microsoft.Toolkit.Uwp.UI.Controls.Media/ImageCropper/ImageCropper.Events.cs index 68b22851bdf..8bad6f2e683 100644 --- a/Microsoft.Toolkit.Uwp.UI.Controls.Media/ImageCropper/ImageCropper.Events.cs +++ b/Microsoft.Toolkit.Uwp.UI.Controls.Media/ImageCropper/ImageCropper.Events.cs @@ -173,7 +173,7 @@ private void ImageCanvas_SizeChanged(object sender, SizeChangedEventArgs e) if (_lazyInitImageLayoutAction != null) { - _lazyInitImageLayoutAction?.Invoke(); + _lazyInitImageLayoutAction.Invoke(); _lazyInitImageLayoutAction = null; } else