From 603a0a7e6f9fc5ecc15d65436f3dfe03274d488c Mon Sep 17 00:00:00 2001 From: ClemensFischer Date: Fri, 24 May 2024 22:00:16 +0200 Subject: [PATCH] Avalonia: do not coerce default property value --- .../Avalonia/DependencyPropertyHelper.Avalonia.cs | 14 +++++++++++--- MapControl/Avalonia/MapBase.Avalonia.cs | 6 +++--- MapControl/Shared/MapBase.cs | 9 +-------- MapControl/WPF/MapBase.WPF.cs | 6 +++--- MapControl/WinUI/MapBase.WinUI.cs | 6 +++--- 5 files changed, 21 insertions(+), 20 deletions(-) diff --git a/MapControl/Avalonia/DependencyPropertyHelper.Avalonia.cs b/MapControl/Avalonia/DependencyPropertyHelper.Avalonia.cs index 7c1f8d14..35ad2773 100644 --- a/MapControl/Avalonia/DependencyPropertyHelper.Avalonia.cs +++ b/MapControl/Avalonia/DependencyPropertyHelper.Avalonia.cs @@ -19,9 +19,17 @@ namespace MapControl bool bindTwoWayByDefault = false) where TOwner : AvaloniaObject { - var property = AvaloniaProperty.Register(name, defaultValue, false, - bindTwoWayByDefault ? Avalonia.Data.BindingMode.TwoWay : Avalonia.Data.BindingMode.OneWay, null, - coerce != null ? ((obj, value) => coerce((TOwner)obj, value)) : null); + Func coerceFunc = null; + + if (coerce != null) + { + // do not coerce default value + coerceFunc = (obj, value) => value.Equals(defaultValue) ? value : coerce((TOwner)obj, value); + } + + var bindingMode = bindTwoWayByDefault ? Avalonia.Data.BindingMode.TwoWay : Avalonia.Data.BindingMode.OneWay; + + var property = AvaloniaProperty.Register(name, defaultValue, false, bindingMode, null, coerceFunc); if (changed != null) { diff --git a/MapControl/Avalonia/MapBase.Avalonia.cs b/MapControl/Avalonia/MapBase.Avalonia.cs index 8e8c622d..0701ab72 100644 --- a/MapControl/Avalonia/MapBase.Avalonia.cs +++ b/MapControl/Avalonia/MapBase.Avalonia.cs @@ -35,7 +35,7 @@ namespace MapControl true); public static readonly StyledProperty MinZoomLevelProperty = - DependencyPropertyHelper.Register(nameof(MinZoomLevel), DefaultZoomLevel, + DependencyPropertyHelper.Register(nameof(MinZoomLevel), 1d, (map, oldValue, newValue) => map.MinZoomLevelPropertyChanged(newValue), (map, value) => map.CoerceMinZoomLevelProperty(value)); @@ -45,13 +45,13 @@ namespace MapControl (map, value) => map.CoerceMaxZoomLevelProperty(value)); public static readonly StyledProperty ZoomLevelProperty = - DependencyPropertyHelper.Register(nameof(ZoomLevel), DefaultZoomLevel, + DependencyPropertyHelper.Register(nameof(ZoomLevel), 1d, (map, oldValue, newValue) => map.ZoomLevelPropertyChanged(newValue), (map, value) => map.CoerceZoomLevelProperty(value), true); public static readonly StyledProperty TargetZoomLevelProperty = - DependencyPropertyHelper.Register(nameof(TargetZoomLevel), DefaultZoomLevel, + DependencyPropertyHelper.Register(nameof(TargetZoomLevel), 1d, async (map, oldValue, newValue) => await map.TargetZoomLevelPropertyChanged(newValue), (map, value) => map.CoerceZoomLevelProperty(value), true); diff --git a/MapControl/Shared/MapBase.cs b/MapControl/Shared/MapBase.cs index 657fb11a..f2be3866 100644 --- a/MapControl/Shared/MapBase.cs +++ b/MapControl/Shared/MapBase.cs @@ -35,8 +35,6 @@ namespace MapControl /// public partial class MapBase : MapPanel { - private const double DefaultZoomLevel = 1d; - public static TimeSpan ImageFadeDuration { get; set; } = TimeSpan.FromSeconds(0.1); public static readonly DependencyProperty AnimationDurationProperty = @@ -420,12 +418,7 @@ namespace MapControl private double CoerceZoomLevelProperty(double zoomLevel) { - if (zoomLevel != DefaultZoomLevel) // Avalonia: ignore coercing default value - { - zoomLevel = Math.Min(Math.Max(zoomLevel, MinZoomLevel), MaxZoomLevel); - } - - return zoomLevel; + return Math.Min(Math.Max(zoomLevel, MinZoomLevel), MaxZoomLevel); } private double CoerceHeadingProperty(double heading) diff --git a/MapControl/WPF/MapBase.WPF.cs b/MapControl/WPF/MapBase.WPF.cs index 16e26e44..ad309c4b 100644 --- a/MapControl/WPF/MapBase.WPF.cs +++ b/MapControl/WPF/MapBase.WPF.cs @@ -31,7 +31,7 @@ namespace MapControl true); public static readonly DependencyProperty MinZoomLevelProperty = - DependencyPropertyHelper.Register(nameof(MinZoomLevel), DefaultZoomLevel, + DependencyPropertyHelper.Register(nameof(MinZoomLevel), 1d, (map, oldValue, newValue) => map.MinZoomLevelPropertyChanged(newValue), (map, value) => map.CoerceMinZoomLevelProperty(value)); @@ -41,13 +41,13 @@ namespace MapControl (map, value) => map.CoerceMaxZoomLevelProperty(value)); public static readonly DependencyProperty ZoomLevelProperty = - DependencyPropertyHelper.Register(nameof(ZoomLevel), DefaultZoomLevel, + DependencyPropertyHelper.Register(nameof(ZoomLevel), 1d, (map, oldValue, newValue) => map.ZoomLevelPropertyChanged(newValue), (map, value) => map.CoerceZoomLevelProperty(value), true); public static readonly DependencyProperty TargetZoomLevelProperty = - DependencyPropertyHelper.Register(nameof(TargetZoomLevel), DefaultZoomLevel, + DependencyPropertyHelper.Register(nameof(TargetZoomLevel), 1d, (map, oldValue, newValue) => map.TargetZoomLevelPropertyChanged(newValue), (map, value) => map.CoerceZoomLevelProperty(value), true); diff --git a/MapControl/WinUI/MapBase.WinUI.cs b/MapControl/WinUI/MapBase.WinUI.cs index 40f063f7..39b9fdee 100644 --- a/MapControl/WinUI/MapBase.WinUI.cs +++ b/MapControl/WinUI/MapBase.WinUI.cs @@ -35,7 +35,7 @@ namespace MapControl (map, oldValue, newValue) => map.TargetCenterPropertyChanged(newValue)); public static readonly DependencyProperty MinZoomLevelProperty = - DependencyPropertyHelper.Register(nameof(MinZoomLevel), DefaultZoomLevel, + DependencyPropertyHelper.Register(nameof(MinZoomLevel), 1d, (map, oldValue, newValue) => map.MinZoomLevelPropertyChanged(newValue)); public static readonly DependencyProperty MaxZoomLevelProperty = @@ -43,11 +43,11 @@ namespace MapControl (map, oldValue, newValue) => map.MaxZoomLevelPropertyChanged(newValue)); public static readonly DependencyProperty ZoomLevelProperty = - DependencyPropertyHelper.Register(nameof(ZoomLevel), DefaultZoomLevel, + DependencyPropertyHelper.Register(nameof(ZoomLevel), 1d, (map, oldValue, newValue) => map.ZoomLevelPropertyChanged(newValue)); public static readonly DependencyProperty TargetZoomLevelProperty = - DependencyPropertyHelper.Register(nameof(TargetZoomLevel), DefaultZoomLevel, + DependencyPropertyHelper.Register(nameof(TargetZoomLevel), 1d, (map, oldValue, newValue) => map.TargetZoomLevelPropertyChanged(newValue)); public static readonly DependencyProperty HeadingProperty =