diff --git a/src/Artemis.UI.Shared/Controls/DraggableNumberBox.axaml b/src/Artemis.UI.Shared/Controls/DraggableNumberBox.axaml index 8322b5738..0c571239e 100644 --- a/src/Artemis.UI.Shared/Controls/DraggableNumberBox.axaml +++ b/src/Artemis.UI.Shared/Controls/DraggableNumberBox.axaml @@ -32,8 +32,7 @@ SimpleNumberFormat="{CompiledBinding $parent[sharedControls:DraggableNumberBox].SimpleNumberFormat}" attachedProperties:NumberBoxAssist.PrefixText="{CompiledBinding $parent[sharedControls:DraggableNumberBox].Prefix}" attachedProperties:NumberBoxAssist.SuffixText="{CompiledBinding $parent[sharedControls:DraggableNumberBox].Suffix}" - HorizontalAlignment="{CompiledBinding $parent[sharedControls:DraggableNumberBox].HorizontalAlignment}" - ValueChanged="NumberBox_OnValueChanged"/> + HorizontalAlignment="{CompiledBinding $parent[sharedControls:DraggableNumberBox].HorizontalAlignment}"/> diff --git a/src/Artemis.UI.Shared/Controls/DraggableNumberBox.axaml.cs b/src/Artemis.UI.Shared/Controls/DraggableNumberBox.axaml.cs index 663a76a13..1b3124421 100644 --- a/src/Artemis.UI.Shared/Controls/DraggableNumberBox.axaml.cs +++ b/src/Artemis.UI.Shared/Controls/DraggableNumberBox.axaml.cs @@ -4,7 +4,7 @@ using Avalonia.Controls; using Avalonia.Data; using Avalonia.Input; using Avalonia.Interactivity; -using Avalonia.Markup.Xaml; +using Avalonia.LogicalTree; using Avalonia.VisualTree; using FluentAvalonia.Core; using FluentAvalonia.UI.Controls; @@ -68,13 +68,12 @@ public partial class DraggableNumberBox : UserControl public DraggableNumberBox() { InitializeComponent(); - InnerNumberBox.Value = Value; - + PointerPressed += OnPointerPressed; PointerMoved += OnPointerMoved; PointerReleased += OnPointerReleased; PropertyChanged += OnPropertyChanged; - + AddHandler(KeyUpEvent, HandleKeyUp, RoutingStrategies.Direct | RoutingStrategies.Tunnel | RoutingStrategies.Bubble, true); } @@ -159,7 +158,22 @@ public partial class DraggableNumberBox : UserControl /// Occurs when the user finishes dragging over the control. /// public event TypedEventHandler? DragFinished; - + + /// + protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) + { + InnerNumberBox.Value = Value; + InnerNumberBox.ValueChanged += InnerNumberBoxOnValueChanged; + base.OnAttachedToLogicalTree(e); + } + + /// + protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e) + { + InnerNumberBox.ValueChanged -= InnerNumberBoxOnValueChanged; + base.OnDetachedFromLogicalTree(e); + } + private void SetNumberBoxValue(double value) { if (!(Math.Abs(InnerNumberBox.Value - Value) > 0.00001)) @@ -243,14 +257,14 @@ public partial class DraggableNumberBox : UserControl e.Handled = true; } - + private void OnPropertyChanged(object? sender, AvaloniaPropertyChangedEventArgs e) { if (e.Property == ValueProperty) SetNumberBoxValue(Value); } - private void NumberBox_OnValueChanged(NumberBox sender, NumberBoxValueChangedEventArgs args) + private void InnerNumberBoxOnValueChanged(NumberBox sender, NumberBoxValueChangedEventArgs args) { if (_updating) return;