我找不到我需要的属性或对象..
我已经实现了可拖动和可缩放的图像,但我可以将其拖出屏幕,因此我将图像从 View 中丢失了。
我应该把图像放在哪里才能将其保存在盒子内(并且可能具有良好的弹跳效果)?
编辑:
实际上,我的图像必须保留在堆栈面板中,只能放大。 (最大缩小作为第一个渲染)。
一些代码:
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。如果我缩小,我会停下来,直到初始比例相同!
现在我仍然需要有关如何避免外面的阻力的帮助。
最佳答案
好的,我找到了解决方案,但我需要一些改进。 缩放工作正常,但是当图像位于右侧时,它全部位于左侧(因为它是从左上角开始缩放的..
这是“阻止拖动”的代码:
private void OnDragDelta(object sender, DragDeltaGestureEventArgs e)
{
double realWidth = image_chart.ActualWidth*compositeTransform.ScaleX;
double realHeight = image_chart.ActualHeight * compositeTransform.ScaleY;
if(compositeTransform.TranslateX>=0)
compositeTransform.TranslateX = Math.Max(container.ActualWidth - realWidth,
Math.Min(0, compositeTransform.TranslateX + e.HorizontalChange));
else
compositeTransform.TranslateX = Math.Max(container.ActualWidth - realWidth,
Math.Min(0, compositeTransform.TranslateX + e.HorizontalChange));
if(compositeTransform.TranslateY>=0)
compositeTransform.TranslateY = Math.Max(container.ActualHeight - realHeight,
Math.Min(0, compositeTransform.TranslateY + e.VerticalChange));
else
compositeTransform.TranslateY = Math.Max(container.ActualHeight - realHeight,
Math.Min(0, compositeTransform.TranslateY + e.VerticalChange));
编辑:
最后我决定使用网络浏览器..更加“流畅”和令人愉快!
关于image - 如何不将图像拖出框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10616816/