소스 검색

Fixed Opacity slider infinite loading bug

CPKreuz 2 년 전
부모
커밋
81fe4648d8
1개의 변경된 파일6개의 추가작업 그리고 1개의 파일을 삭제
  1. 6 1
      src/PixiEditor/Helpers/Behaviours/SliderUpdateBehavior.cs

+ 6 - 1
src/PixiEditor/Helpers/Behaviours/SliderUpdateBehavior.cs

@@ -63,6 +63,8 @@ internal class SliderUpdateBehavior : Behavior<Slider>
     private bool bindingValueChangedWhileDragging = false;
     private double bindingValueWhileDragging = 0.0;
 
+    private bool skipSetOpacity;
+    
     protected override void OnAttached()
     {
         AssociatedObject.Loaded += AssociatedObject_Loaded;
@@ -109,12 +111,13 @@ internal class SliderUpdateBehavior : Behavior<Slider>
     private static void OnSliderValuePropertyChange(DependencyObject slider, DependencyPropertyChangedEventArgs e)
     {
         SliderUpdateBehavior obj = (SliderUpdateBehavior)slider;
+        
         if (obj.dragging)
         {
             if (obj.DragValueChanged is not null && obj.DragValueChanged.CanExecute(e.NewValue))
                 obj.DragValueChanged.Execute(e.NewValue);
         }
-        else
+        else if (!obj.skipSetOpacity)
         {
             if (obj.SetOpacity is not null && obj.SetOpacity.CanExecute(e.NewValue))
                 obj.SetOpacity.Execute(e.NewValue);
@@ -124,6 +127,7 @@ internal class SliderUpdateBehavior : Behavior<Slider>
     private static void OnBindingValuePropertyChange(DependencyObject slider, DependencyPropertyChangedEventArgs e)
     {
         SliderUpdateBehavior obj = (SliderUpdateBehavior)slider;
+        obj.skipSetOpacity = true;
         if (obj.dragging)
         {
             obj.bindingValueChangedWhileDragging = true;
@@ -131,6 +135,7 @@ internal class SliderUpdateBehavior : Behavior<Slider>
             return;
         }
         obj.ValueFromSlider = (double)e.NewValue;
+        obj.skipSetOpacity = false;
     }
 
     private void Thumb_DragCompleted(object sender, DragCompletedEventArgs e)