私は夢中になっています。この問題を解決しようと一日中検索しました。データベースから画像をバインドし、ピンチしてズームします。
<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;
不明な点がありましたら申し訳ありませんが、私は本当に打ちのめされています...あなたの助けを願っています