必要なプロパティまたはオブジェクトが見つかりません..
ドラッグ可能でズーム可能な画像を実装しましたが、画面の外にドラッグできるため、画像がビューから失われます。
画像をボックス内に保持するには、どこに画像を配置する必要がありますか (そして、おそらく素晴らしいバウンス効果があります)?
編集:
事実上、私の画像はズームインの可能性だけで、スタックパネルに残る必要があります。(最初のレンダリングとして最大ズームアウト)。
ちょっとしたコード:
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>
EDIT 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 が同じになるまで停止します!
外へのドラッグを回避する方法については、まだ助けが必要です。