我快疯了,我整天都在搜索试图解决这个问题,我从数据库中绑定了一个图像并捏合缩放作品:
<Grid x:Name="LayoutRoot">
<ProgressBar x:Name="progressBar" Width="480" Margin="0,125,0,0" Height="10" VerticalAlignment="Top" IsIndeterminate="{Binding ShowProgressBar}" Visibility="{Binding ShowProgressBar, Converter={StaticResource BooleanToVisibilityConverter}}"></ProgressBar>
<Image x:Name="image" CacheMode="BitmapCache" Width="480" Stretch="Uniform" VerticalAlignment="Center">
<Image.RenderTransform>
<CompositeTransform x:Name="transform" />
</Image.RenderTransform>
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener PinchStarted="OnPinchStarted" PinchDelta="OnPinchDelta" PinchCompleted="OnPinchCompleted" DragDelta="OnDragDelta" DragStarted="OnDragStarted" DragCompleted="OnDragCompleted" />
</toolkit:GestureService.GestureListener>
</Image>
</Grid>
private void OnPinchStarted(object sender, PinchStartedGestureEventArgs e)
{
image = sender as Image;
transform = image.RenderTransform as CompositeTransform;
initialScale = transform.ScaleX;
}
private void OnPinchDelta(object sender, PinchGestureEventArgs e)
{
if (initialScale >= 1)
{
transform.ScaleX = initialScale * e.DistanceRatio;
transform.ScaleY = initialScale * e.DistanceRatio;
}
}
private void OnPinchCompleted(object sender, PinchGestureEventArgs e)
{
if ((transform.ScaleX < 1) || (transform.ScaleY < 1))
{
transform.ScaleX = 1;
transform.ScaleY = 1;
transform.TranslateX = 0;
transform.TranslateY = -240;
}
}
private void OnDragStarted(object sender, DragStartedGestureEventArgs e)
{
PANEL_DRAG_HORIZONTAL = 0;
}
private void OnDragDelta(object sender, DragDeltaGestureEventArgs e)
{
if ((transform.ScaleX <= 1) || (transform.ScaleY <= 1))
{
if (e.Direction == System.Windows.Controls.Orientation.Horizontal)
{
PANEL_DRAG_HORIZONTAL += e.HorizontalChange;
}
}
else
{
transform.TranslateX += e.HorizontalChange;
transform.TranslateY += e.VerticalChange;
}
}
private void OnDragCompleted(object sender, DragCompletedGestureEventArgs e)
{
if (transform.TranslateX > 0)
transform.TranslateX = 0;
if (transform.TranslateY > -240)
transform.TranslateY = -240;
if ((transform.ScaleX <= 1) || (transform.ScaleY <= 1))
{
if (e.Direction == System.Windows.Controls.Orientation.Horizontal)
{
var abs = Math.Abs(PANEL_DRAG_HORIZONTAL);
if (abs > 75)
{
if (PANEL_DRAG_HORIZONTAL > 0) // MovePrevious;
{ MessageBox.Show("prev"); }
else //MoveNext();
{ MessageBox.Show("next"); }
e.Handled = true;
}
}
}
}
但我无法在转换后获得正确大小的图像,因为我想避免在左侧/底部拖动后丢失它......我在这里轻松处理了顶部/左侧的这个问题
private void OnDragCompleted(object sender, DragCompletedGestureEventArgs e)
{
if (transform.TranslateX > 0)
transform.TranslateX = 0;
if (transform.TranslateY > -240)
transform.TranslateY = -240;
如果有什么不清楚的地方我很抱歉,但我真的很沮丧......希望你能帮助