protected virtual void RaiseDragDelta(DragDeltaGestureEventArgs e) { var handler = DragDelta; if (handler != null) { handler(this, e); } }
private void OnDragDelta(object sender, DragDeltaGestureEventArgs e) { if (!IsEnabled) { return; } RaiseDragDelta(e); //if (CurrentScaleX == 1.0) return; //DebugText.Text = string.Format("DragDelta X={0} Y={1} Direction={2}", e.HorizontalChange, e.VerticalChange, e.Direction); // Translation is done as the last operation, so no need to move the operation up in composition order var img = sender as FrameworkElement; if (img == null) { return; } var transform = img.RenderTransform as CompositeTransform; if (transform == null) { return; } if (!CanZoom) { return; } var translate = new CompositeTransform { TranslateX = e.HorizontalChange, TranslateY = e.VerticalChange }; ConstrainToParentBounds(img, translate); var t = ComposeScaleTranslate(transform, translate); img.RenderTransform = t; if (DebugText != null) { DebugText.Text = string.Format("Scale={0}x{1}\nCenter={2}x{3}\nTranslate={4}x{5}", t.ScaleX, t.ScaleY, t.CenterX, t.CenterY, t.TranslateX, t.TranslateY); } }
private void OnDragDelta(object sender, DragDeltaGestureEventArgs e) { if (!IsEnabled) { return; } _lastDragDeltaEventArgs = e; RaiseDragDelta(e); //if (CurrentScaleX == 1.0) return; //DebugText.Text = string.Format("DragDelta X={0} Y={1} Direction={2}", e.HorizontalChange, e.VerticalChange, e.Direction); // Translation is done as the last operation, so no need to move the operation up in composition order var img = sender as FrameworkElement; if (img == null) { return; } var transform = img.RenderTransform as CompositeTransform; if (transform == null) { return; } CompositeTransform translate = null; if (CurrentScaleX == 1.0) { if (SuppressDrag) { return; } if (_direction == Orientation.Vertical) { translate = new CompositeTransform { TranslateX = 0, TranslateY = e.VerticalChange }; if (BackgroundPanel != null) { var rootFrameHeight = ((PhoneApplicationFrame)Application.Current.RootVisual).ActualHeight; var deltaY = Math.Abs(translate.TranslateY + translate.ScaleY * transform.TranslateY + (translate.ScaleY - 1) * (transform.CenterY - translate.CenterY)); var opacity = (rootFrameHeight - deltaY) / rootFrameHeight; var backgroundBrush = (SolidColorBrush)BackgroundPanel.Background; var backgroundColor = backgroundBrush.Color; backgroundColor.A = (byte)(opacity * byte.MaxValue); BackgroundPanel.Opacity = opacity; //BackgroundPanel.Background = new SolidColorBrush(backgroundColor); } img.RenderTransform = ComposeScaleTranslate(transform, translate); } else if (_direction == Orientation.Horizontal) { //translate = new CompositeTransform //{ // TranslateX = e.HorizontalChange, // TranslateY = 0 //}; //img.RenderTransform = ComposeScaleTranslate(transform, translate); } } else { if (!CanZoom) { return; } translate = new CompositeTransform { TranslateX = e.HorizontalChange, TranslateY = e.VerticalChange }; ConstrainToParentBounds(img, translate); img.RenderTransform = ComposeScaleTranslate(transform, translate); } }