Hello All. I use Ver 17.10 preview 1 and Android Ver 34.
I try to add Pinch Gesture Container and I get an error message.
As below:
What I miss. Please any help. Thank you.
//Error I get
//MainPage.xaml : XamlC error : Failed to resolve assembly: 'PinchGesture, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
// File
// MainPage.xml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="RazKmoShed.MainPage" Loaded="MainPage_Loaded" x:Name="myContentPage"
xmlns:mct="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
xmlns:local="clr-namespace:RazKmoShed;assembly=PinchGesture"
xmlns:label="clr-namespace:RazKmoShed"
xmlns:entry="clr-namespace:RazKmoShed"
FlowDirection="LeftToRight" BackgroundColor="#ECE5DD" >
<ScrollView x:Name="topscroll" HorizontalScrollBarVisibility="Never" VerticalScrollBarVisibility="Never" >
<local:PinchToZoomContainer>
<VerticalStackLayout x:Name="vLayout" Margin="10" Padding="5" Spacing="5" BackgroundColor="#ECE5DD" >
. . . . . . . . ...
</VerticalStackLayout>
</local:PinchToZoomContainer>
</ScrollView>
</ContentPage>
// File
// PinchToZoomContainer.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RazKmoShed
{
public class PinchToZoomContainer : ContentView
{
double currentScale = 1;
double startScale = 1;
double xOffset = 0;
double yOffset = 0;
public PinchToZoomContainer()
{
PinchGestureRecognizer 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 = Math.Clamp(targetX, -Content.Width * (currentScale - 1), 0);
Content.TranslationY = Math.Clamp(targetY, -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;
}
}
}
}