2014-10-20 30 views
1

我可以拖動這些圖片向右或向左,向上,向下它通過了一個屏幕。我有放大和縮小。我想限制這一點。使用Windows Phone 8.1應用程序。 轉換後,如果圖像超出邊界則將圖像帶回。您可以通過比較TranslateX/TranslateY的值和邊界的寬度/高度來檢測圖像是否超出邊界。邊界是圖像的父級(它是一個Grid?),您需要調試代碼以確定TranslateX和TranslateY的邊界。如何幫助移動圖像不超過屏幕上的限制

XAML

<Grid> 
    <Grid Name="container"> 
     <Image Name="img_container" Source="/papers.co-mb00-baloon-fly-sea-wallpaper-1920x1080.jpg" 
       ManipulationDelta="Image_ManipulationDelta" 
       ManipulationMode="Scale,TranslateX,TranslateY" 
       Stretch="Uniform" 
       RenderTransformOrigin="0.5,0.5"> 
      <Image.RenderTransform> 
       <CompositeTransform/> 
      </Image.RenderTransform> 
     </Image> 
    </Grid> 
</Grid> 

C#

int mincale = 1; 
private void Image_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) 
{ 
    Image img = sender as Image; 
    CompositeTransform ct = img.RenderTransform as CompositeTransform; 
    //zoom 
    ct.ScaleX *= e.Delta.Scale; 
    ct.ScaleY *= e.Delta.Scale; 

    //checking 

    if (ct.ScaleX < mincale) 
     ct.ScaleX = mincale; 
    if (ct.ScaleY < mincale) 
     ct.ScaleY = mincale; 

    //drag whitle zooming. 

    ct.TranslateX += e.Delta.Translation.X; 
    ct.TranslateY += e.Delta.Translation.Y; 

    //checking drag not passed over a screen.that's fails. 

    if (ct.TranslateX < 10 - img.ActualWidth * ct.ScaleX) 
     ct.TranslateX = 10 - img.ActualWidth * ct.ScaleX; 

    if (ct.TranslateX > container.ActualWidth - 10) 
     ct.TranslateX = container.ActualWidth - 10; 

    if (ct.TranslateY < 10 - img.ActualHeight * ct.ScaleY) 
     ct.TranslateY = 10 - img.ActualHeight * ct.ScaleY; 

    if (ct.TranslateY > container.ActualHeight - 10) 
     ct.TranslateY = container.ActualHeight - 10; 
} 
+0

這個環節限制拖動圖片 – bach 2014-10-20 03:33:04

回答

0

可以檢查其分辨率是存在的,根據設定的圖像的高度和寬度。

var scalfactor = App.Current.Host.Content.ScaleFactor; 
 
switch (scalfactor) 
 
      { 
 
       case 150: 
 
//write code for 720p or other screen Resolution 
 

 
        
 
        break; 
 
       case 160: 
 
//write code for Wxga screen Resolution 
 
      
 
        break; 
 
       case 100: 
 
//write code for Wvga screen Resolution 
 
       break; 
 
       default: 
 
        throw new InvalidOperationException("Unknown resolution type"); 
 
      }

PLZ參考更多信息 http://msdn.microsoft.com/en-us/library/windows/apps/jj206974%28v=vs.105%29.aspx

相關問題