我找不到我需要的属性或对象..
我已经实现了一个可拖动和可缩放的图像,但我可以将它拖出屏幕,所以我的图像丢失了视图。
我应该将图像放在哪里以将其保存在盒子中(并且可能具有不错的弹跳效果)?
编辑:
实际上,我的图像必须保留在堆栈面板中,只有放大的可能性。(最大缩小作为第一次渲染)。
一点代码:
private void OnPinchStarted(object sender, PinchStartedGestureEventArgs e)
{
initialAngle = compositeTransform.Rotation;
initialScale = compositeTransform.ScaleX;
}
private void OnPinchDelta(object sender, PinchGestureEventArgs e)
{
compositeTransform.ScaleX = initialScale * e.DistanceRatio;
compositeTransform.ScaleY = initialScale * e.DistanceRatio;
}
private void OnDragDelta(object sender, DragDeltaGestureEventArgs e)
{
compositeTransform.TranslateX += e.HorizontalChange;
compositeTransform.TranslateY += e.VerticalChange;
}
<StackPanel x:Name="container">
<Image x:Name="image_chart">
<Image.RenderTransform>
<TransformGroup>
<ScaleTransform x:Name="scale" />
<TranslateTransform x:Name="transform" />
<CompositeTransform x:Name="compositeTransform"/>
</TransformGroup>
</Image.RenderTransform>
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener PinchStarted="OnPinchStarted" PinchDelta="OnPinchDelta"
DragDelta="OnDragDelta"/>
</toolkit:GestureService.GestureListener>
</Image>
</StackPanel>
编辑 2 - 半答案
我终于找到了如何以原始尺寸停止缩小!
private void OnPinchDelta(object sender, PinchGestureEventArgs e)
{
if (1.0 <= (initialScale * e.DistanceRatio))
{
compositeTransform.ScaleX = initialScale * e.DistanceRatio;
compositeTransform.ScaleY = initialScale * e.DistanceRatio;
}
}
If 条件意味着:如果我放大 -> 没问题,因为 e.DistanceRatio >1。如果我缩小,我会停下来,直到 initialScale 相同!
现在我仍然需要关于如何避免外部阻力的帮助。