2011-08-12 10 views
2

私は二次画像(2000×2000)を持っています。私はそれらをフルスクリーンでページに表示して、「ピンチでズーム」することができます。従って、最初の画像は768×768のシースを有する。WP7二次画像をフルスクリーンで表示し、ズームしてピンチします

。すぐそこに何か欠けていると、左のように画像は、二次であることを、

private void OnPinchStarted(object sender, PinchStartedGestureEventArgs e) 
{ 
    var image = sender as Image; 

    if (image == null) return; 

    initialScale = transform.ScaleX; 

    Point firstTouch = e.GetPosition(image, 0); 
    Point secondTouch = e.GetPosition(image, 1); 

    center = new Point(firstTouch.X + (secondTouch.X - firstTouch.X)/2.0, 
         firstTouch.Y + (secondTouch.Y - firstTouch.Y)/2.0); 
} 

private void OnPinchDelta(object sender, PinchGestureEventArgs e) 
{ 
    var image = sender as Image; 

    if (image == null) return; 

    if (initialScale*e.DistanceRatio > 4 || (initialScale != 1 && e.DistanceRatio == 1) || 
     initialScale*e.DistanceRatio < 1) 
     return; 

    if (e.DistanceRatio <= 1.08) 
    { 
     transform.CenterY = 0; 
     transform.CenterY = 0; 
     transform.TranslateX = 0; 
     transform.TranslateY = 0; 
    } 

    transform.CenterX = center.X; 
    transform.CenterY = center.Y; 

    transform.ScaleX = (Orientation == PageOrientation.Landscape) 
          ? initialScale*(1 + (e.DistanceRatio - 1)*2) 
          : initialScale*e.DistanceRatio; 

    transform.ScaleY = transform.ScaleX; 
} 

private void OnDragDelta(object sender, DragDeltaGestureEventArgs e) 
{ 
    var image = sender as Image; 

    if (image == null || transform.ScaleX <= 1.1) return; 

    double centerX = transform.CenterX; 
    double centerY = transform.CenterY; 
    double translateX = transform.TranslateX; 
    double translateY = transform.TranslateY; 
    double scale = transform.ScaleX; 
    double width = image.ActualWidth; 
    double height = image.ActualHeight; 

    if (centerX - scale*centerX + translateX + e.HorizontalChange < 0 && 
     centerX + scale*(width - centerX) + translateX + e.HorizontalChange > width) 
    { 
     transform.TranslateX += e.HorizontalChange; 
    } 

    if (centerY - scale*centerY + translateY + e.VerticalChange < 0 && 
     centerY + scale*(height - centerY) + translateY + e.VerticalChange > height) 
    { 
     transform.TranslateY += e.VerticalChange; 
    } 

    return; 
} 

は基本的に私が今持っていることはありませんボーダー(フルスクリーン)で、絵であると私は、ズームインすることができます。しかし、問題はあります私は左または右に "スクロール"(または、より良い画像を移動することはできません)。画像のarroundを動かすのは、ズームインしたときだけですが、画像の欠けている部分は見えません。任意のアイデアをどのようにこれを解決するには?

+0

私はコードを変更しました。最初にズームインすることなく、イメージを移動できます。しかし、画像は単に視覚的なスクリーンの外で作物されているだけです。画像コントロールのサイズを768 x 768に変更しても、表示幅(428)外のものはすべて白です。ストレッチプロパティを変更しても、この動作は変わりません。 –

答えて

2

問題が解決するかどうかはわかりません。しかし、あなたのイメージはGRID上かキャンバス上にあるのですか?それがグリッド上にあると、コンテンツは切り取られます。キャンバスははるかに大きくなる可能性があります。

+0

ありがとう、それは作物のトリックをした... –

関連する問題