Image xamarin表单图像缩放和滚动

Image xamarin表单图像缩放和滚动,image,scroll,xamarin.forms,zooming,Image,Scroll,Xamarin.forms,Zooming,我使用这个PinchGestureRecognitor来缩放图像,但问题是在缩放后,我无法垂直滚动图像,即使我已使用Orientation=“Both” 以下是PinchToomContainer类: public class PinchToZoomContainer : ContentView { double currentScale = 1; double startScale = 1; double xOffset = 0; double yOffset

我使用这个PinchGestureRecognitor来缩放图像,但问题是在缩放后,我无法垂直滚动图像,即使我已使用
Orientation=“Both”

以下是PinchToomContainer类:

public class PinchToZoomContainer : ContentView
{
    double currentScale = 1;
    double startScale = 1;
    double xOffset = 0;
    double yOffset = 0;

    public PinchToZoomContainer()
    {
        var pinchGesture = new PinchGestureRecognizer();
        pinchGesture.PinchUpdated += OnPinchUpdated;
        GestureRecognizers.Add(pinchGesture);
    }

    void OnPinchUpdated(object sender, PinchGestureUpdatedEventArgs e)
    {
        if (e.Status == GestureStatus.Started)
        {
            // Store the current scale factor applied to the wrapped user interface element,
            // and zero the components for the center point of the translate transform.
            startScale = Content.Scale;
            Content.AnchorX = 0;
            Content.AnchorY = 0;
        }
        if (e.Status == GestureStatus.Running)
        {
            // Calculate the scale factor to be applied.
            currentScale += (e.Scale - 1) * startScale;
            currentScale = Math.Max(1, currentScale);

            // The ScaleOrigin is in relative coordinates to the wrapped user interface element,
            // so get the X pixel coordinate.
            double renderedX = Content.X + xOffset;
            double deltaX = renderedX / Width;
            double deltaWidth = Width / (Content.Width * startScale);
            double originX = (e.ScaleOrigin.X - deltaX) * deltaWidth;

            // The ScaleOrigin is in relative coordinates to the wrapped user interface element,
            // so get the Y pixel coordinate.
            double renderedY = Content.Y + yOffset;
            double deltaY = renderedY / Height;
            double deltaHeight = Height / (Content.Height * startScale);
            double originY = (e.ScaleOrigin.Y - deltaY) * deltaHeight;

            // Calculate the transformed element pixel coordinates.
            double targetX = xOffset - (originX * Content.Width) * (currentScale - startScale);
            double targetY = yOffset - (originY * Content.Height) * (currentScale - startScale);

            // Apply translation based on the change in origin.
            Content.TranslationX = targetX.Clamp(-Content.Width * (currentScale - 1), 0);
            Content.TranslationY = targetY.Clamp(-Content.Height * (currentScale - 1), 0);

            // Apply scale factor
            Content.Scale = currentScale;
        }
        if (e.Status == GestureStatus.Completed)
        {
            // Store the translation delta's of the wrapped user interface element.
            xOffset = Content.TranslationX;
            yOffset = Content.TranslationY;
        }
    }
}
这是夹紧方法:

   public static class DoubleExtensions
{
    public static double Clamp(this double self, double min, double max)
    {
        return Math.Min(max, Math.Max(self, min));
    }
}
这是我的XAML文件中的图像:

<StackLayout Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Grid.RowSpan="3">
          <ScrollView x:Name="imageScroll" Orientation="Both" VerticalOptions="FillAndExpand">
                <entry:PinchToZoomContainer>
                     <entry:PinchToZoomContainer.Content>
                          <Image  x:Name="zoomImage" Source="{images:EmbeddedImage Vebko.Images.CB_Edite_Vb1_2.jpg}" Margin="0,0,0,10" HorizontalOptions="Center" VerticalOptions="Center"/>  
                      </entry:PinchToZoomContainer.Content>
                 </entry:PinchToZoomContainer>
            </ScrollView>
 </StackLayout>


有人能帮忙吗?

我想当你缩放
内容时,
PinchToomContainer:ContentView
大小保持不变,这就是为什么scrollview不响应=当控件的内容被缩放时,在代码中根据高度/宽度请求更改控件的大小