public static void setWidgetClickHandler(Windows.UI.Xaml.UIElement widget, System.Action handler) { if (widget is cave.ui.CustomContainerWidget) { if (!(handler != null)) { ((cave.ui.CustomContainerWidget)widget).togglePointerEventHandling(false); } else { ((cave.ui.CustomContainerWidget)widget).togglePointerEventHandling(true); } } if (cave.ui.Widget.existingWidgetClickHandler != null) { widget.PointerReleased -= existingWidgetClickHandler; cave.ui.Widget.existingWidgetClickHandler = null; } if (handler != null) { existingWidgetClickHandler = async(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e) => { singleClick = true; await System.Threading.Tasks.Task.Delay(200); if (singleClick) { handler(); } }; widget.PointerReleased += existingWidgetClickHandler; } }
/// <summary> /// Helper for adding mouse events /// </summary> /// <param name="view">The view to listen for events on.</param> /// <param name="onMove">Action when the mouse moves.</param> /// <param name="onTapped">Action when the view is tapped.</param> /// <param name="onDoubleTapped">Action when the view is double tapped.</param> /// <returns>An Action that cleans up all the event handlers.</returns> private static Action SetUpHandlers(SceneView view, Action <MapPoint> onMove, Action <MapPoint> onTapped, Action <MapPoint> onDoubleTapped) { #if NETFX_CORE Windows.UI.Xaml.Input.PointerEventHandler movehandler = null; #else System.Windows.Input.MouseEventHandler movehandler = null; #endif if (onMove != null) { #if NETFX_CORE movehandler = (s, e) => onMove(view.ScreenToLocation(e.GetCurrentPoint(view).Position)); view.PointerMoved += movehandler; #else movehandler = (s, e) => onMove(view.ScreenToLocation(e.GetPosition(view))); view.MouseMove += movehandler; #endif } EventHandler <MapViewInputEventArgs> tappedHandler = null; if (onTapped != null) { tappedHandler = (s, e) => onTapped(e.Location); view.SceneViewTapped += tappedHandler; } EventHandler <MapViewInputEventArgs> doubletappedHandler = null; if (onDoubleTapped != null) { doubletappedHandler = (s, e) => { e.Handled = true; onDoubleTapped(e.Location); }; view.SceneViewDoubleTapped += doubletappedHandler; } Action cleanup = () => { if (movehandler != null) #if NETFX_CORE { view.PointerMoved -= movehandler; } #else { view.MouseMove -= movehandler; } #endif if (tappedHandler != null) { view.SceneViewTapped -= tappedHandler; } if (doubletappedHandler != null) { view.SceneViewDoubleTapped -= doubletappedHandler; } }; return(cleanup); }