Avalonia: do not coerce default property value

This commit is contained in:
ClemensFischer 2024-05-24 22:00:16 +02:00
parent 98847f5d86
commit 603a0a7e6f
5 changed files with 21 additions and 20 deletions

View file

@ -19,9 +19,17 @@ namespace MapControl
bool bindTwoWayByDefault = false) bool bindTwoWayByDefault = false)
where TOwner : AvaloniaObject where TOwner : AvaloniaObject
{ {
var property = AvaloniaProperty.Register<TOwner, TValue>(name, defaultValue, false, Func<AvaloniaObject, TValue, TValue> coerceFunc = null;
bindTwoWayByDefault ? Avalonia.Data.BindingMode.TwoWay : Avalonia.Data.BindingMode.OneWay, null,
coerce != null ? ((obj, value) => coerce((TOwner)obj, value)) : 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<TOwner, TValue>(name, defaultValue, false, bindingMode, null, coerceFunc);
if (changed != null) if (changed != null)
{ {

View file

@ -35,7 +35,7 @@ namespace MapControl
true); true);
public static readonly StyledProperty<double> MinZoomLevelProperty = public static readonly StyledProperty<double> MinZoomLevelProperty =
DependencyPropertyHelper.Register<MapBase, double>(nameof(MinZoomLevel), DefaultZoomLevel, DependencyPropertyHelper.Register<MapBase, double>(nameof(MinZoomLevel), 1d,
(map, oldValue, newValue) => map.MinZoomLevelPropertyChanged(newValue), (map, oldValue, newValue) => map.MinZoomLevelPropertyChanged(newValue),
(map, value) => map.CoerceMinZoomLevelProperty(value)); (map, value) => map.CoerceMinZoomLevelProperty(value));
@ -45,13 +45,13 @@ namespace MapControl
(map, value) => map.CoerceMaxZoomLevelProperty(value)); (map, value) => map.CoerceMaxZoomLevelProperty(value));
public static readonly StyledProperty<double> ZoomLevelProperty = public static readonly StyledProperty<double> ZoomLevelProperty =
DependencyPropertyHelper.Register<MapBase, double>(nameof(ZoomLevel), DefaultZoomLevel, DependencyPropertyHelper.Register<MapBase, double>(nameof(ZoomLevel), 1d,
(map, oldValue, newValue) => map.ZoomLevelPropertyChanged(newValue), (map, oldValue, newValue) => map.ZoomLevelPropertyChanged(newValue),
(map, value) => map.CoerceZoomLevelProperty(value), (map, value) => map.CoerceZoomLevelProperty(value),
true); true);
public static readonly StyledProperty<double> TargetZoomLevelProperty = public static readonly StyledProperty<double> TargetZoomLevelProperty =
DependencyPropertyHelper.Register<MapBase, double>(nameof(TargetZoomLevel), DefaultZoomLevel, DependencyPropertyHelper.Register<MapBase, double>(nameof(TargetZoomLevel), 1d,
async (map, oldValue, newValue) => await map.TargetZoomLevelPropertyChanged(newValue), async (map, oldValue, newValue) => await map.TargetZoomLevelPropertyChanged(newValue),
(map, value) => map.CoerceZoomLevelProperty(value), (map, value) => map.CoerceZoomLevelProperty(value),
true); true);

View file

@ -35,8 +35,6 @@ namespace MapControl
/// </summary> /// </summary>
public partial class MapBase : MapPanel public partial class MapBase : MapPanel
{ {
private const double DefaultZoomLevel = 1d;
public static TimeSpan ImageFadeDuration { get; set; } = TimeSpan.FromSeconds(0.1); public static TimeSpan ImageFadeDuration { get; set; } = TimeSpan.FromSeconds(0.1);
public static readonly DependencyProperty AnimationDurationProperty = public static readonly DependencyProperty AnimationDurationProperty =
@ -420,12 +418,7 @@ namespace MapControl
private double CoerceZoomLevelProperty(double zoomLevel) private double CoerceZoomLevelProperty(double zoomLevel)
{ {
if (zoomLevel != DefaultZoomLevel) // Avalonia: ignore coercing default value return Math.Min(Math.Max(zoomLevel, MinZoomLevel), MaxZoomLevel);
{
zoomLevel = Math.Min(Math.Max(zoomLevel, MinZoomLevel), MaxZoomLevel);
}
return zoomLevel;
} }
private double CoerceHeadingProperty(double heading) private double CoerceHeadingProperty(double heading)

View file

@ -31,7 +31,7 @@ namespace MapControl
true); true);
public static readonly DependencyProperty MinZoomLevelProperty = public static readonly DependencyProperty MinZoomLevelProperty =
DependencyPropertyHelper.Register<MapBase, double>(nameof(MinZoomLevel), DefaultZoomLevel, DependencyPropertyHelper.Register<MapBase, double>(nameof(MinZoomLevel), 1d,
(map, oldValue, newValue) => map.MinZoomLevelPropertyChanged(newValue), (map, oldValue, newValue) => map.MinZoomLevelPropertyChanged(newValue),
(map, value) => map.CoerceMinZoomLevelProperty(value)); (map, value) => map.CoerceMinZoomLevelProperty(value));
@ -41,13 +41,13 @@ namespace MapControl
(map, value) => map.CoerceMaxZoomLevelProperty(value)); (map, value) => map.CoerceMaxZoomLevelProperty(value));
public static readonly DependencyProperty ZoomLevelProperty = public static readonly DependencyProperty ZoomLevelProperty =
DependencyPropertyHelper.Register<MapBase, double>(nameof(ZoomLevel), DefaultZoomLevel, DependencyPropertyHelper.Register<MapBase, double>(nameof(ZoomLevel), 1d,
(map, oldValue, newValue) => map.ZoomLevelPropertyChanged(newValue), (map, oldValue, newValue) => map.ZoomLevelPropertyChanged(newValue),
(map, value) => map.CoerceZoomLevelProperty(value), (map, value) => map.CoerceZoomLevelProperty(value),
true); true);
public static readonly DependencyProperty TargetZoomLevelProperty = public static readonly DependencyProperty TargetZoomLevelProperty =
DependencyPropertyHelper.Register<MapBase, double>(nameof(TargetZoomLevel), DefaultZoomLevel, DependencyPropertyHelper.Register<MapBase, double>(nameof(TargetZoomLevel), 1d,
(map, oldValue, newValue) => map.TargetZoomLevelPropertyChanged(newValue), (map, oldValue, newValue) => map.TargetZoomLevelPropertyChanged(newValue),
(map, value) => map.CoerceZoomLevelProperty(value), (map, value) => map.CoerceZoomLevelProperty(value),
true); true);

View file

@ -35,7 +35,7 @@ namespace MapControl
(map, oldValue, newValue) => map.TargetCenterPropertyChanged(newValue)); (map, oldValue, newValue) => map.TargetCenterPropertyChanged(newValue));
public static readonly DependencyProperty MinZoomLevelProperty = public static readonly DependencyProperty MinZoomLevelProperty =
DependencyPropertyHelper.Register<MapBase, double>(nameof(MinZoomLevel), DefaultZoomLevel, DependencyPropertyHelper.Register<MapBase, double>(nameof(MinZoomLevel), 1d,
(map, oldValue, newValue) => map.MinZoomLevelPropertyChanged(newValue)); (map, oldValue, newValue) => map.MinZoomLevelPropertyChanged(newValue));
public static readonly DependencyProperty MaxZoomLevelProperty = public static readonly DependencyProperty MaxZoomLevelProperty =
@ -43,11 +43,11 @@ namespace MapControl
(map, oldValue, newValue) => map.MaxZoomLevelPropertyChanged(newValue)); (map, oldValue, newValue) => map.MaxZoomLevelPropertyChanged(newValue));
public static readonly DependencyProperty ZoomLevelProperty = public static readonly DependencyProperty ZoomLevelProperty =
DependencyPropertyHelper.Register<MapBase, double>(nameof(ZoomLevel), DefaultZoomLevel, DependencyPropertyHelper.Register<MapBase, double>(nameof(ZoomLevel), 1d,
(map, oldValue, newValue) => map.ZoomLevelPropertyChanged(newValue)); (map, oldValue, newValue) => map.ZoomLevelPropertyChanged(newValue));
public static readonly DependencyProperty TargetZoomLevelProperty = public static readonly DependencyProperty TargetZoomLevelProperty =
DependencyPropertyHelper.Register<MapBase, double>(nameof(TargetZoomLevel), DefaultZoomLevel, DependencyPropertyHelper.Register<MapBase, double>(nameof(TargetZoomLevel), 1d,
(map, oldValue, newValue) => map.TargetZoomLevelPropertyChanged(newValue)); (map, oldValue, newValue) => map.TargetZoomLevelPropertyChanged(newValue));
public static readonly DependencyProperty HeadingProperty = public static readonly DependencyProperty HeadingProperty =