瀏覽代碼

Use weak reference in for Gesture last press.

Steven Kirk 9 年之前
父節點
當前提交
d31efbe4cf
共有 1 個文件被更改,包括 5 次插入5 次删除
  1. 5 5
      src/Perspex.Input/Gestures.cs

+ 5 - 5
src/Perspex.Input/Gestures.cs

@@ -18,7 +18,7 @@ namespace Perspex.Input
             RoutingStrategies.Bubble,
             RoutingStrategies.Bubble,
             typeof(Gestures));
             typeof(Gestures));
 
 
-        private static IInteractive s_lastPress;
+        private static WeakReference s_lastPress;
 
 
         static Gestures()
         static Gestures()
         {
         {
@@ -34,9 +34,9 @@ namespace Perspex.Input
 
 
                 if (e.ClickCount <= 1)
                 if (e.ClickCount <= 1)
                 {
                 {
-                    s_lastPress = e.Source;
+                    s_lastPress = new WeakReference(e.Source);
                 }
                 }
-                else if (e.ClickCount == 2 && s_lastPress == e.Source)
+                else if (s_lastPress?.IsAlive == true && e.ClickCount == 2 && s_lastPress.Target == e.Source)
                 {
                 {
                     e.Source.RaiseEvent(new RoutedEventArgs(DoubleTappedEvent));
                     e.Source.RaiseEvent(new RoutedEventArgs(DoubleTappedEvent));
                 }
                 }
@@ -49,9 +49,9 @@ namespace Perspex.Input
             {
             {
                 var e = (PointerReleasedEventArgs)ev;
                 var e = (PointerReleasedEventArgs)ev;
 
 
-                if (s_lastPress == e.Source)
+                if (s_lastPress?.IsAlive == true && s_lastPress.Target == e.Source)
                 {
                 {
-                    s_lastPress.RaiseEvent(new RoutedEventArgs(TappedEvent));
+                    ((IInteractive)s_lastPress.Target).RaiseEvent(new RoutedEventArgs(TappedEvent));
                 }
                 }
             }
             }
         }
         }